UWAGA: witryna została wycofana. Po 31 stycznia 2023 roku witryna zostanie wyłączona, a ruch będzie kierowany do nowej witryny na https://protobuf.dev. Do tego czasu aktualizacje będą dotyczyć tylko protobuf.dev.

Package google.protobuf

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Indeks

Dowolny

Any zawiera dowolną zserializowaną wiadomość wraz z adresem URL opisującym typ zserializowanej wiadomości.

JSON

Format JSON wartości Any korzysta ze zwykłej reprezentacji wiadomości umieszczonej na preferowanym miejscu i z dodatkowym polem @type, które zawiera typ adresu URL. Przykład

package google.profile;
message Person {
  string first_name = 1;
  string last_name = 2;
}

{
  "@type": "type.googleapis.com/google.profile.Person",
  "firstName": <string>,
  "lastName": <string>
}

Jeśli typ wiadomości umieszczonej jest dobrze znany i ma niestandardową reprezentację JSON, ta reprezentacja zostanie umieszczona wraz z polem value, które oprócz pola @type zawiera niestandardowy kod JSON. Przykład (wiadomość google.protobuf.Duration):

{
  "@type": "type.googleapis.com/google.protobuf.Duration",
  "value": "1.212s"
}
Nazwa pola Typ Opis
type_url string

Nazwa adresu URL lub zasobu, którego treść opisuje typ zserializowanej wiadomości.

W przypadku adresów URL, które używają schematu http lub https bądź nie zawierają żadnego schematu, obowiązują te ograniczenia i interpretacje:

  • Jeśli nie podasz żadnego schematu, przyjmowany jest schemat https.
  • Ostatni segment ścieżki adresu URL musi reprezentować pełną nazwę typu (tak jak w przypadku path/google.protobuf.Duration).
  • Protokół HTTP GET adresu URL musi zwracać wartość google.protobuf.Type w formacie binarnym lub zwracać błąd.
  • Aplikacje mogą umieszczać w pamięci podręcznej wyniki wyszukiwania na podstawie adresów URL lub zapisywać je w postaci binarnej, aby uniknąć wyszukiwania. Dlatego w przypadku zmian typów należy zachować zgodność binarną. Aby zarządzać zmianami powodującymi niezgodność, używaj nazw typów wersji.

Schematy inne niż http, https (lub pusty schemat) mogą być używane z semantyką implementacji.

value bytes Muszą być prawidłowe zserializowane dane podanego powyżej typu.

API

Api to lekki deskryptor usługi bufora protokołu.

Nazwa pola Typ Opis
name string Pełna nazwa tego API, w tym nazwa pakietu, po której następuje prosta nazwa interfejsu.
methods Method Metody tego interfejsu API w nieokreślonej kolejności.
options Option Wszelkie metadane dołączone do interfejsu API.
version string

Ciąg znaków wersji tego interfejsu API. Jeśli został podany, musi mieć format major-version.minor-version, jak w przypadku 1.10. Jeśli pominiesz wersję podrzędną, jej domyślna wartość to 0. Jeśli całe pole wersji jest puste, wersja główna jest pobierana z nazwy pakietu zgodnie z wytycznymi poniżej. Jeśli to pole nie jest puste, wersja w nazwie pakietu zostanie zweryfikowana zgodnie z tym, co podano w tym miejscu.

Schemat obsługi wersji korzysta z wersji semantycznej, w której numer wersji głównej oznacza zmianę powodującą niezgodność, a wersja podrzędna jest dodatkiem niewymagającym zmian. Oba numery wersji wskazują użytkownikom, czego mogą się spodziewać w różnych wersjach. Należy je uważnie wybierać na podstawie pakietu usług.

Wersja główna jest też widoczna w nazwie pakietu interfejsu API, która musi się kończyć na v<major-version>, tak jak google.feature.v1. W przypadku wersji głównych 0 i 1 sufiks może zostać pominięty. Zero wersji głównych można używać tylko do eksperymentalnych interfejsów API bez interfejsu GA.

source_context SourceContext Kontekst źródłowy usługi bufora protokołu reprezentowanej przez tę wiadomość.
mixins Mixin Dołączone interfejsy API. Zobacz Mixin.
syntax Syntax Składnia źródła w usłudze.

Wartość logiczna

Wiadomość opakowana dla: bool.

Reprezentacja JSON dla BoolValue to JSON true i false.

Nazwa pola Typ Opis
value bool Wartość logiczna.

Wartość bajtów

Wiadomość opakowana dla: bytes.

Reprezentacja JSON dla BytesValue jest ciągiem JSON.

Nazwa pola Typ Opis
value bytes Bajty.

Wartość typu double

Wiadomość opakowana dla: double.

Reprezentacja JSON dla DoubleValue to numer JSON.

Nazwa pola Typ Opis
value double Wartość podwójna.

Czas trwania

Czas trwania reprezentuje podpisany przedział czasu o stałej długości wyrażony jako liczba sekund i ułamków sekund w rozdzielczości nanosekund. Niezależne jest od kalendarza i koncepcji, takich jak „dzień” czy „miesiąc”. Opiera się na sygnaturze czasowej, ponieważ różnica między 2 wartościami sygnatury czasowej to czas trwania. Można ją dodać lub odjąć od sygnatury czasowej. Zakres wynosi około -10 000 lat.

Przykład 1: obliczenie czasu trwania z 2 sygnatur czasowych w pseudokodu

Timestamp start = ...;
Timestamp end = ...;
Duration duration = ...;

duration.seconds = end.seconds - start.seconds;
duration.nanos = end.nanos - start.nanos;

if (duration.seconds < 0 && duration.nanos > 0) {
  duration.seconds += 1;
  duration.nanos -= 1000000000;
} else if (duration.seconds > 0 && duration.nanos < 0) {
  duration.seconds -= 1;
  duration.nanos += 1000000000;
}

Przykład 2: sygnatura czasowa obliczeń z sygnaturą czasową + czas trwania w pseudokodu.

Timestamp start = ...;
Duration duration = ...;
Timestamp end = ...;

end.seconds = start.seconds + duration.seconds;
end.nanos = start.nanos + duration.nanos;

if (end.nanos < 0) {
  end.seconds -= 1;
  end.nanos += 1000000000;
} else if (end.nanos >= 1000000000) {
  end.seconds += 1;
  end.nanos -= 1000000000;
}

Format JSON dla Duration to String, który kończy się s i wskazuje sekundy. Jest poprzedzony liczbą sekund, a nanosekundami jest wyrażona jako ułamki dziesiętne.

Nazwa pola Typ Opis
seconds int64 Podpisano sekundy. Musi mieścić się w zakresie od -315 576 000 000 do +315 576 000 000 włącznie.
nanos int32 Podpisane ułamki sekundy w rozdzielczości nanosekundy w danym okresie. Czasy trwania krótsze niż 1 sekunda są przedstawiane w polu 0 seconds i dodatnim lub ujemnym polu nanos. Jeśli czas trwania wynosi co najmniej 1 sekundę, wartość inna niż zero w polu nanos musi być taka sama jak w polu seconds. Musi mieścić się w zakresie od -999 999 999 do +999 999 999 włącznie.

Pusta

Ogólna pusta wiadomość, której możesz użyć ponownie, aby uniknąć powielania pustych wiadomości w interfejsach API. Typowym przykładem jest użycie jej jako żądania lub typu odpowiedzi metody interfejsu API. Przykład:

service Foo {
  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
}

Reprezentacja JSON Empty jest pustym obiektem {}.

Enum

Definicja typu enum.

Nazwa pola Typ Opis
name string Nazwa typu enum.
enumvalue EnumValue Definicje wartości enum.
options Option Opcje bufora protokołu.
source_context SourceContext Kontekst źródłowy.
syntax Syntax Składnia źródłowa.

Wartość num

Definicja wartości num.

Nazwa pola Typ Opis
name string Nazwa wartości num.
number int32 Liczba wartości num.
options Option Opcje bufora protokołu.

Field

Jedno pole typu wiadomości.

Nazwa pola Typ Opis
kind Kind Typ pola.
cardinality Cardinality Moc zbioru.
number int32 Numer pola.
name string Nazwa pola.
type_url string Typ adresu URL pola (bez schematu) dla wiadomości lub typów wyliczenia. Przykład: "type.googleapis.com/google.protobuf.Timestamp".
oneof_index int32 Indeks typu pola w Type.oneofs dla wiadomości lub typów wyliczenia. Pierwszy typ ma indeks 1. Zero oznacza, że nie ma go na liście.
packed bool Określa, czy chcesz używać innego przewodowego reprezentowania przewodów.
options Option Opcje bufora protokołu.
json_name string Nazwa JSON pola.
default_value string Wartość ciągu przypisana do wartości domyślnej tego pola. Tylko składnia Proto2.

Moc zbioru

Określa, czy pole jest opcjonalne, wymagane czy powtórzone.

Wartość num Opis
CARDINALITY_UNKNOWN W przypadku pól o nieznanej mocy zbioru.
CARDINALITY_OPTIONAL W przypadku pól opcjonalnych
CARDINALITY_REQUIRED W polach wymaganych. Tylko składnia Proto2.
CARDINALITY_REPEATED W przypadku pól powtórzonych.

Rodzaj

Podstawowe typy pól.

Wartość num Opis
TYPE_UNKNOWN Nieznany typ pola.
TYPE_DOUBLE Typ pola podwójny.
TYPE_FLOAT Typ zmiennoprzecinkowy typu pola.
TYPE_INT64 Typ pola int64.
TYPE_UINT64 Typ pola uint64.
TYPE_INT32 Typ pola int32.
TYPE_FIXED64 Typ pola został naprawiony.
TYPE_FIXED32 Typ pola ustalony 32.
TYPE_BOOL Typ pola logicznego.
TYPE_STRING Ciąg typu pola.
TYPE_GROUP Grupa typów pól. Tylko składnia Proto2 i wycofana.
TYPE_MESSAGE Komunikat dotyczący typu pola.
TYPE_BYTES Bajty typu pola.
TYPE_UINT32 Typ pola uint32.
TYPE_ENUM Wyliczenie typu pola.
TYPE_SFIXED32 Typ pola „sfixed32”.
TYPE_SFIXED64 Typ pola „sfixed64”.
TYPE_SINT32 Typ pola: sint32.
TYPE_SINT64 Typ pola: sint64.

Maska pola

FieldMask to zestaw symboli powiązanych ze ścieżkami, na przykład:

paths: "f.a"
paths: "f.b.d"

f oznacza pole w wiadomości głównej, pola a i b w wiadomości w f oraz d w polu w wiadomości w f.b.

Maski pól służą do określania podzbiorów pól, które powinny zostać zwrócone przez operację pobierania (prognozę) lub modyfikowane przez operację aktualizacji. Maski pól również mają niestandardowe kodowanie JSON (patrz poniżej).

Maski w prognozach

Gdy FieldMask określa prognozę, interfejs API filtruje odpowiedź (lub komunikat podrzędny) tylko na te pola określone w masce. Weźmy na przykład taki komunikat z napisem „maskowanie”:

f {
  a : 22
  b {
    d : 1
    x : 2
  }
  y : 13
}
z: 8

Po zastosowaniu maski w poprzednim przykładzie odpowiedź interfejsu API nie będzie zawierać konkretnych wartości w polach x, y i z (ich wartość zostanie ustawiona jako domyślna i pominięta w danych wyjściowych proto):

f {
  a : 22
  b {
    d : 1
  }
}

Pole powtarzane jest niedozwolone oprócz ostatniej pozycji maski pola.

Jeśli w metodzie get nie ma obiektu FieldMask, ta operacja ma zastosowanie do wszystkich pól (tak jak w przypadku określenia maski pola).

Pamiętaj, że maska pola nie musi należeć do wiadomości z odpowiedzią najwyższego poziomu. W przypadku operacji pobierania REST maska ma zastosowanie bezpośrednio do odpowiedzi, ale w przypadku operacji na liście REST maska dotyczy każdej wiadomości na zwróconej liście zasobów. W przypadku metody niestandardowej REST można używać innych definicji. Jeśli maska jest stosowana, musi być ona dokładnie udokumentowana wraz z jej deklaracją w interfejsie API. W każdym przypadku wpływ na zwrócone zasoby/zasoby jest wymagany w przypadku interfejsów API.

Maski pól w operacjach aktualizowania

Maska w operacji aktualizowania określa, które pola zasobu docelowego będą aktualizowane. Interfejs API jest wymagany tylko do zmiany wartości pól określonych w masce, a pozostałe pola pozostają bez zmian. Jeśli do opisania zaktualizowanych wartości przekazywany jest zasób, interfejs API ignoruje wartości we wszystkich polach nieobjętych maską.

Aby można było przywrócić wartość domyślną, pole musi znajdować się w masce i musi być ustawiona na wartość domyślną w podanym zasobie. Aby zresetować wszystkie pola zasobu, podaj domyślną instancję zasobu i ustaw wszystkie pola w masce lub nie podawaj maski, jak opisano poniżej.

Jeśli w trakcie aktualizacji nie ma maski pola, operacja ma zastosowanie do wszystkich pól (tak jak w przypadku określenia maski wszystkich pól). Pamiętaj, że w przypadku rozwoju schematu może to oznaczać, że pola, których klient nie zna, i dlatego nie wypełniły żądania, zostaną zresetowane do wartości domyślnych. Jeśli takie zachowanie jest niepożądane, dana usługa może wymagać, aby klient zawsze tworzył maskę pola. W przeciwnym razie wystąpi błąd.

Tak jak w przypadku operacji pobierania, lokalizacja zasobu opisującego zaktualizowane wartości w komunikacie żądania zależy od rodzaju operacji. Interfejs API musi uwzględniać efekt maskowania pola.

Uwagi dotyczące protokołu REST HTTP

Rodzaj HTTP operacji aktualizacji, który korzysta z maski pola, musi być ustawiony na PATCH, a nie PUT, aby zapewnić zgodność z semantyką HTTP (PUT może być używane tylko do pełnej aktualizacji).

Kodowanie masek w formacie JSON

W formacie JSON maska pola jest zakodowana jako pojedynczy ciąg znaków, w którym ścieżki są rozdzielone przecinkiem. Nazwa pól w każdej ścieżce jest konwertowana na konwencje nazewnictwa stosowane w małych literach.

Weźmy na przykład te deklaracje wiadomości:

message Profile {
  User user = 1;
  Photo photo = 2;
}
message User {
  string display_name = 1;
  string address = 2;
}

W masce pola Proto dla atrybutu Profile może wyglądać tak:

mask {
  paths: "user.display_name"
  paths: "photo"
}

W formacie JSON ta sama maska jest przedstawiona poniżej:

{
  mask: "user.displayName,photo"
}
Nazwa pola Typ Opis
paths string Zestaw ścieżek masek pola.

Liczba zmiennoprzecinkowa

Wiadomość opakowana dla: float.

Reprezentacja JSON dla FloatValue to numer JSON.

Nazwa pola Typ Opis
value float Liczba zmiennoprzecinkowa.

Int32Value,

Wiadomość opakowana dla: int32.

Reprezentacja JSON dla Int32Value to numer JSON.

Nazwa pola Typ Opis
value int32 Wartość int32

Int64Value,

Wiadomość opakowana dla: int64.

Reprezentacja JSON dla Int64Value jest ciągiem JSON.

Nazwa pola Typ Opis
value int64 Wartość int64.

Wartość listy

ListValue to kod towarzyszący powtarzanemu polu wartości.

Reprezentacja JSON dla ListValue to tablica JSON.

Nazwa pola Typ Opis
values Value Powtórzone pole wartości wpisywanych dynamicznie.

Metoda

Metoda reprezentuje metodę API.

Nazwa pola Typ Opis
name string Prosta nazwa tej metody.
request_type_url string Adres URL typu wiadomości wejściowej.
request_streaming bool Jeśli ma wartość true (prawda), żądanie jest przesyłane strumieniowo.
response_type_url string Adres URL typu komunikatu wyjściowego.
response_streaming bool Jeśli ma wartość true (prawda), odpowiedź jest przesyłana strumieniowo.
options Option Wszystkie metadane dołączone do metody.
syntax Syntax Składnia źródłowa tej metody.

Mieszanka

Deklaruje interfejs API, który ma być uwzględniony w tym API. Uwzględniany interfejs API musi zadeklarować wszystkie metody z uwzględnionego interfejsu API, ale dokumentacja i opcje są dziedziczone w następujący sposób:

  • Jeśli po usunięciu komentarza i spacji odstępy tekstowe dokumentacji zdeklarowanej metody będą puste, zostanie ona odziedziczona z metody oryginalnej.

  • Każda adnotacja należąca do konfiguracji usługi (http, widoczność), która nie została ustawiona w zadeklarowanej metodzie, zostanie odziedziczona.

  • Jeśli adnotacja http jest dziedziczona, wzorzec ścieżki jest zmodyfikowany w następujący sposób. Prefiks zostanie zastąpiony wersją interfejsu API uwzględniającą też ścieżkę root, jeśli została określona.

Przykład prostej składanki:

package google.acl.v1;
service AccessControl {
  // Get the underlying ACL object.
  rpc GetAcl(GetAclRequest) returns (Acl) {
    option (google.api.http).get = "/v1/{resource=**}:getAcl";
  }
}

package google.storage.v2;
service Storage {
  //       rpc GetAcl(GetAclRequest) returns (Acl);

  // Get a data record.
  rpc GetData(GetDataRequest) returns (Data) {
    option (google.api.http).get = "/v2/{resource=**}";
  }
}

Przykład konfiguracji mieszanki:

apis:
- name: google.storage.v2.Storage
  mixins:
  - name: google.acl.v1.AccessControl

Konstrukcja mieszanki sugeruje, że wszystkie metody w zasadzie AccessControl są również zadeklarowane z taką samą nazwą i w przypadku tych typów żądań i odpowiedzi w Storage. Po zastosowaniu dokumentacji i adnotacji generator dokumentacji lub adnotacja zobaczy obowiązującą metodę Storage.GetAcl:

service Storage {
  // Get the underlying ACL object.
  rpc GetAcl(GetAclRequest) returns (Acl) {
    option (google.api.http).get = "/v2/{resource=**}:getAcl";
  }
  ...
}

Zwróć uwagę, że wersja wzorca ścieżki zmieniła się z v1 na v2.

Jeśli pole root w składance jest określone, powinno być względne, w którym znajdują się dziedziczone ścieżki HTTP. Przykład

apis:
- name: google.storage.v2.Storage
  mixins:
  - name: google.acl.v1.AccessControl
    root: acls

Sugeruje to następującą dziedziczoną adnotację HTTP:

service Storage {
  // Get the underlying ACL object.
  rpc GetAcl(GetAclRequest) returns (Acl) {
    option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
  }
  ...
}
Nazwa pola Typ Opis
name string Pełna nazwa interfejsu API, która jest uwzględniona.
root string Jeśli to pole nie jest puste, podaj ścieżkę, której dotyczą dziedziczone ścieżki HTTP.

Wartość null

NullValue to liczba pojedyncza reprezentująca wartość null dla typu połączenia Value.

Reprezentacja JSON dla NullValue to JSON null.

Wartość num Opis
NULL_VALUE Wartość pusta.

Option

Opcja bufora protokołu, którą można dołączyć do wiadomości, pola, wyliczenia itp.

Nazwa pola Typ Opis
name string Nazwa opcji. Na przykład: "java_package".
value Any Wartość opcji. Na przykład: "com.google.protobuf".

Kontekst źródłowy

SourceContext reprezentuje informacje o źródle elementu protobuf, takie jak plik, w którym jest zdefiniowany.

Nazwa pola Typ Opis
file_name string Zakwalifikowana ścieżka nazwa pliku .proto zawierającego powiązany element protobuf. na przykład: "google/protobuf/source.proto".

Wartość ciągu znaków

Wiadomość opakowana dla: string.

Reprezentacja JSON dla StringValue jest ciągiem JSON.

Nazwa pola Typ Opis
value string Wartość ciągu.

Uporządkowane

Struct reprezentuje wartość danych strukturalnych składającą się z pól zmapowanych na wartości wpisane dynamicznie. W przypadku niektórych języków Struct może być obsługiwana przez natywną reprezentację. Na przykład w językach skryptowych, takich jak JS, struktura jest reprezentowana jako obiekt. Szczegółowe informacje na temat takiej reprezentacji znajdziesz w opisie protokołu proto, który obsługuje dany język.

Reprezentacja JSON dla Struct to obiekt JSON.

Nazwa pola Typ Opis
fields map<string, Value> Mapa dynamicznie wpisywanych wartości.

Składnia

Składnia, w której definiuje się element bufora protokołu.

Wartość num Opis
SYNTAX_PROTO2 Składnia proto2.
SYNTAX_PROTO3 Składnia proto3.

Sygnatura czasowa

Sygnatura czasowa reprezentuje punkt w czasie niezależny od strefy czasowej lub kalendarza wyrażony w sekundach i ułamkach sekund w nanosekundach w czasie UTC. Jest on kodowany za pomocą kalendarza gregoriańskiego z wyprzedzeniem, który sięga wstecz do pierwszego roku. Jest kodowany z założeniem, że wszystkie minuty trwają 60 sekund, tj. są one rozmyte, więc do interpretacji nie potrzeba kolejnej tabeli pomocniczej. Zakres wynosi od 0001-01-01T00:00:00Z do 9999-12-31T23:59:59.999999999Z. Ograniczenie tego zakresu daje pewność, że ciąg znaków zostanie przekonwertowany na ciąg znaków zgodny z RFC 3339. Zobacz https://www.ietf.org/rfc/rfc3339.txt.

Przykład 1: sygnatura czasowa obliczenia z POSIX time().

Timestamp timestamp;
timestamp.set_seconds(time(NULL));
timestamp.set_nanos(0);

Przykład 2: sygnatura czasowa obliczenia z POSIX gettimeofday().

struct timeval tv;
gettimeofday(&tv, NULL);

Timestamp timestamp;
timestamp.set_seconds(tv.tv_sec);
timestamp.set_nanos(tv.tv_usec * 1000);

Przykład 3: sygnatura czasowa obliczenia z systemu Win32 GetSystemTimeAsFileTime().

FILETIME ft;
GetSystemTimeAsFileTime(&ft);
UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;

// A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
// is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
Timestamp timestamp;
timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));

Przykład 4: sygnatura czasowa obliczenia w Javie System.currentTimeMillis().

long millis = System.currentTimeMillis();

Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
    .setNanos((int) ((millis % 1000) * 1000000)).build();

Przykład 5: sygnatura czasowa obliczeń w bieżącym czasie w Pythonie.

now = time.time()
seconds = int(now)
nanos = int((now - seconds) * 10**9)
timestamp = Timestamp(seconds=seconds, nanos=nanos)
Nazwa pola Typ Opis
seconds int64 Reprezentuje czas wyrażony w sekundach UTC od czasu Unix 1970-01-01T00:00:00Z. Musi mieścić się w zakresie od 0001-01-01T00:00:00Z do 9999-12-31T23:59:59Z (włącznie).
nanos int32 Nieujemne wartości ułamkowe sekundy w rozdzielczości nanosekundy. Wartość ujemna wartości dziesiętnych z ułamkami musi nadal być liczbą ujemną z czasem. Musi mieścić się w zakresie od 0 do 999 999 999 włącznie.

Typ

Typ komunikatu dotyczącego bufora protokołu.

Nazwa pola Typ Opis
name string Pełna i jednoznaczna nazwa wiadomości.
fields Field Lista pól.
oneofs string Lista typów występujących w definicjach oneof w tym typie.
options Option Opcje bufora protokołu.
source_context SourceContext Kontekst źródłowy.
syntax Syntax Składnia źródłowa.

UInt32Wartość

Wiadomość opakowana dla: uint32.

Reprezentacja JSON dla UInt32Value to numer JSON.

Nazwa pola Typ Opis
value uint32 Wartość uint32.

UInt64Wartość

Wiadomość opakowana dla: uint64.

Reprezentacja JSON dla UInt64Value jest ciągiem JSON.

Nazwa pola Typ Opis
value uint64 Wartość uint64.

Wartość

Value reprezentuje dynamicznie wpisaną wartość, która może być wartością null, liczbą, ciągiem znaków, wartością logiczną, rekurencyjną strukturą lub listą wartości. Producent wartości powinien oczekiwać jednej z tych wersji produktu, a brak wartości oznacza błąd.

Reprezentacja JSON dla Value to wartość JSON.

Nazwa pola Typ Opis
Unia Europejska – tylko jedno z tych pól:
null_value NullValue Reprezentuje pustą wartość.
number_value double Reprezentuje podwójną wartość. Pamiętaj, że próba zserializowania NaN lub Infinity powoduje błąd. (Nie można zastosować seriali do wartości „NaN” ani „Nieskończoność”, tak jak w przypadku pól zwykłych, ponieważ byłyby one interpretowane jako wartość_ciągu tekstowego, a nie wartości argumentu liczba_wartości).
string_value string Reprezentuje wartość ciągu znaków.
bool_value bool Reprezentuje wartość logiczną.
struct_value Struct Odzwierciedla wartość strukturalną.
list_value ListValue Reprezentuje powtarzający się element Value.