使用Python BigQuery API上传嵌套JSON遇模糊400错误求助
解决BigQuery加载嵌套重复RECORD时的JSON格式错误
你的400错误根源在于JSON格式不符合BigQuery NEWLINE_DELIMITED_JSON的要求,我帮你梳理了具体问题和修正方案:
原JSON存在的问题
- 引号错误:JSON规范强制要求用双引号包裹所有键名和字符串值,你用了单引号,这会被BigQuery判定为无效格式
- 结构错误:
NEWLINE_DELIMITED_JSON要求每行是一个独立的JSON对象,不需要用外层数组包裹 - 语法不完整:你的JSON末尾缺少闭合的
]和},属于语法错误
正确的JSON示例
把testjson.json的内容改成下面这样,就能正常加载了:
{"full_name":"test","age":2,"address":[{"test":"hi","second":"hi2"}]}
如果需要批量上传多条数据,每行一个JSON对象即可:
{"full_name":"test1","age":30,"address":[{"test":"home","second":"street1"},{"test":"work","second":"street2"}]} {"full_name":"test2","age":25,"address":[{"test":"temp","second":"avenue1"}]}
快速验证JSON合法性的小技巧
你可以用Python自带的json模块提前校验JSON格式,避免上传时踩坑:
import json # 验证单行JSON with open('testjson.json', 'r') as f: try: json.load(f) print("JSON格式合法") except json.JSONDecodeError as e: print(f"JSON格式错误: {e}") # 验证多行NEWLINE_DELIMITED_JSON with open('testjson.json', 'r') as f: for line_num, line in enumerate(f, 1): try: json.loads(line.strip()) except json.JSONDecodeError as e: print(f"第{line_num}行JSON错误: {e}")
补充说明
你的表结构定义是完全正确的:address作为重复的RECORD类型,对应JSON中的数组对象,每个数组元素包含test和second字段,和修正后的JSON结构完美匹配。
内容的提问来源于stack exchange,提问作者Fabian Bosler
相关产品推荐
相关产品推荐

