簡體   English   中英

將 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 表中。

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 中的表是一列 jobId (STRING)。 我得到的錯誤是“TypeError: Object of type 'dict_values' is not JSON serializable”。 我也嘗試在 stackoverflow 鏈接中使用 function。 如何將 Python dict 序列化為 JSON仍然沒有用。 請讓我知道你的想法。 謝謝。

錯誤是因為 python 不知道如何表示 SomeObject。

在這種情況下,您可以驗證 my_dict1 的格式。 你可以看到這個例子

{"class":{"students":[{"id":5},{"id":12}]}}

另一種選擇是在這種情況下驗證表模式的類型是 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"}]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM