将 dict 序列化为 json 并写入 bigquery 时出错
error serializing dict to json and writing to bigquery
这是我的字典
my_dict1 = {'jobId': dict_values(['banned_phrase_model_', 'spica_4', 'spica_create_event1', 'spica_create_event2'])}
我正在尝试使用下面的代码在序列化为 json 后将此字典插入 bigquery table。
from google.cloud import bigquery
import json
from pydantic.json import pydantic_encoder
client1 = Clients.get_client(ClientType.BIGQUERY, name='x')
toJSON = json.dumps(my_dict1, default=pydantic_encoder).encode("utf-8")
data = json.loads(toJSON)
err1 = client1.insert_rows(table,[data])
print(err1)
bigquery中的table是一列jobId(STRING)。我收到的错误是“TypeError:'dict_values' 类型的对象不是 JSON 可序列化的”。
我也尝试使用 Whosebug link 中的函数。
仍然没有用。请让我知道你的想法。谢谢
错误是因为python不知道如何表示SomeObject。
在这种情况下,您可以验证 my_dict1 的格式。你可以看到这个例子
{"class":{"students":[{"id":5},{"id":12}]}}
另一个选项是在这种情况下验证 table 模式的类型是 STRING ,因为这个字段应该是 RECORD
类型或 REPEATED
.
你可以看到这个例子:
- id
- first_name
- last_name
- dob (date of birth)
- addresses (a nested and repeated field)
- addresses.status (current or previous)
- addresses.address
- addresses.city
- addresses.state
- addresses.zip
- addresses.numberOfYears (years at the address)
JSON 看起来像这样
{"id":"1","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]}
{"id":"2","first_name":"Jane","last_name":"Doe","dob":"1980-10-16","addresses":[{"status":"current","address":"789 Any Avenue","city":"New York","state":"NY","zip":"33333","numberOfYears":"2"},{"status":"previous","address":"321 Main Street","city":"Hoboken","state":"NJ","zip":"44444","numberOfYears":"3"}]}
这是我的字典
my_dict1 = {'jobId': dict_values(['banned_phrase_model_', 'spica_4', 'spica_create_event1', 'spica_create_event2'])}
我正在尝试使用下面的代码在序列化为 json 后将此字典插入 bigquery table。
from google.cloud import bigquery
import json
from pydantic.json import pydantic_encoder
client1 = Clients.get_client(ClientType.BIGQUERY, name='x')
toJSON = json.dumps(my_dict1, default=pydantic_encoder).encode("utf-8")
data = json.loads(toJSON)
err1 = client1.insert_rows(table,[data])
print(err1)
bigquery中的table是一列jobId(STRING)。我收到的错误是“TypeError:'dict_values' 类型的对象不是 JSON 可序列化的”。
我也尝试使用 Whosebug link 中的函数。
错误是因为python不知道如何表示SomeObject。
在这种情况下,您可以验证 my_dict1 的格式。你可以看到这个例子
{"class":{"students":[{"id":5},{"id":12}]}}
另一个选项是在这种情况下验证 table 模式的类型是 STRING ,因为这个字段应该是 RECORD
类型或 REPEATED
.
你可以看到这个例子:
- id
- first_name
- last_name
- dob (date of birth)
- addresses (a nested and repeated field)
- addresses.status (current or previous)
- addresses.address
- addresses.city
- addresses.state
- addresses.zip
- addresses.numberOfYears (years at the address)
JSON 看起来像这样
{"id":"1","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]}
{"id":"2","first_name":"Jane","last_name":"Doe","dob":"1980-10-16","addresses":[{"status":"current","address":"789 Any Avenue","city":"New York","state":"NY","zip":"33333","numberOfYears":"2"},{"status":"previous","address":"321 Main Street","city":"Hoboken","state":"NJ","zip":"44444","numberOfYears":"3"}]}