fix: json data type for non object values #1236
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
JSON supports various types of values. At a high level: Objects, Arrays, and various kinds of Scalars. A Spanner column of type JSON can support any of these:
spanner> create table t_json (i int64, j json) primary key (i);
spanner> insert into t_json (i,j) values (1,JSON '[1,2,3]');
spanner> insert into t_json (i,j) values (2,JSON '"foo"');
spanner> insert into t_json (i,j) values (3,JSON '{"a": "b"}');
spanner> select * from t_json;
+---+-----------+
| i | j |
+---+-----------+
| 1 | [1,2,3] |
| 2 | "foo" |
| 3 | {"a":"b"} |
+---+-----------+
Spanner's Python Client assumes that all JSON values are Objects. If you read back a value that is not an Object, you will get an error that looks like:
ValueError: dictionary update sequence element #0 has length 3; 2 is required
The root cause of this issue is this line here: https://github.com/googleapis/python-spanner/blob/main/google/cloud/spanner_v1/data_types.py#L47