Type indicates the type of a Cloud Spanner value, as might be stored in a table cell or returned from an SQL query.

JSON representation
  "code": enum (TypeCode),
  "arrayElementType": {
    object (Type)
  "structType": {
    object (StructType)

enum (TypeCode)

Required. The TypeCode for this type.


object (Type)

If code == ARRAY, then arrayElementType is the type of the array elements.


object (StructType)

If code == STRUCT, then structType provides type information for the struct's fields.


TypeCode is used as part of Type to indicate the type of a Cloud Spanner value.

Each legal value of a type can be encoded to or decoded from a JSON value, using the encodings described below. All Cloud Spanner values can be null, regardless of type; nulls are always encoded as a JSON null.

BOOL Encoded as JSON true or false.
INT64 Encoded as string, in decimal format.
FLOAT64 Encoded as number, or the strings "NaN", "Infinity", or "-Infinity".

Encoded as string in RFC 3339 timestamp format. The time zone must be present, and must be "Z".

If the schema has the column option allow_commit_timestamp=true, the placeholder string "spanner.commit_timestamp()" can be used to instruct the system to insert the commit timestamp associated with the transaction commit.

DATE Encoded as string in RFC 3339 date format.
STRING Encoded as string.
BYTES Encoded as a base64-encoded string, as described in RFC 4648, section 4.
ARRAY Encoded as list, where the list elements are represented according to arrayElementType.
STRUCT Encoded as list, where list element i is represented according to structType.fields[i].

Encoded as string, in decimal format or scientific notation format.
Decimal format:
[+-]Digits[.[Digits]] or

Scientific notation:
[+-]Digits[.[Digits]][ExponentIndicator[+-]Digits] or
(ExponentIndicator is "e" or "E")


Encoded as a JSON-formatted string as described in RFC 7159. The following rules are applied when parsing JSON input:

  • Whitespace characters are not preserved.
  • If a JSON object has duplicate keys, only the first key is preserved.
  • Members of a JSON object are not guaranteed to have their order preserved.
  • JSON array elements will have their order preserved.