加载到Google大查询时出现JSON格式错误
我正在尝试使用内置的数据流模板从PUBSUB加载大查询中的以下数据:加载到Google大查询时出现JSON格式错误,json,google-bigquery,Json,Google Bigquery,我正在尝试使用内置的数据流模板从PUBSUB加载大查询中的以下数据: { "current_speed": "19.09", "_east": "-87.654561", "_last_updt": "2018-07-17 15:50:54.0", "_region_id": "1", "_north": "42.026444", "_south": "41.997946", "region": "Rogers Park - West Ri
{
"current_speed": "19.09",
"_east": "-87.654561",
"_last_updt": "2018-07-17 15:50:54.0",
"_region_id": "1",
"_north": "42.026444",
"_south": "41.997946",
"region": "Rogers Park - West Ridge",
"_west": "-87.709645",
"_description": "North of Devon. Kedzie to Lake Shore"
}
但我一直在犯这样的错误:
读取数据时出错,错误消息:无法解析JSON:
字符串意外结束;字符串意外结束;应为键“
我实际上需要加载更大的数据集,如下所示:
[{
"current_speed": "19.09",
"_east": "-87.654561",
"_last_updt": "2018-07-17 15:50:54.0",
"_region_id": "1",
"_north": "42.026444",
"_south": "41.997946",
"region": "Rogers Park - West Ridge",
"_west": "-87.709645",
"_description": "North of Devon. Kedzie to Lake Shore"
}, {
"current_speed": "25.23",
"_east": "-87.747456",
"_last_updt": "2018-07-17 15:50:54.0",
"_region_id": "2",
"_north": "42.0190998",
"_south": "41.960669",
"region": "Far North West",
"_west": "-87.84621",
"_description": "North of Montrose. East River to Cicero"
}
]
但我得到了这个错误:
读取数据时出错,错误消息:无法解析JSON:否
新数组启动时找到的对象。;BeginArray返回false;
解析器在字符串结束之前终止
我做错了什么?是的,BigQuery只接受新行分隔的JSON,这意味着每行一个完整的JSON对象。在将对象合并到一行之前,BigQuery读取“{”,这是对象的开始,并希望读取一个键,但行结束了,因此您会看到错误消息“expected key”
对于多个JSON对象,只需将它们放在每一行中。不要将它们括在数组中。BigQuery希望每一行以对象“{”开头。如果将“[”作为第一个字符,您将看到第二条错误消息,这意味着BigQuery读取数组,但不读取对象中的对象。将JSON转换为新行分隔的JSON(这是BigQuery接收的格式)您可以使用
jq
:
$ cat a.json
[{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
}
]
$ cat a.json | jq -c '.[]'
{"key01":"value01","key02":"value02","keyN":"valueN"}
{"key01":"value01","key02":"value02","keyN":"valueN"}
{"key01":"value01","key02":"value02","keyN":"valueN"}
(请参阅)不清楚是谁/什么在发送错误消息,以及您是如何执行的。您能添加更多的实现细节吗?Hi@FelipeHoffa感谢您的回复。我正在尝试使用BQ UI上传JSON,以在实现管道之前对其进行测试。我实际上取得了一些进展。我发现BQ喜欢这种“{”当前速度“:”19.77“,”东部“:”87.654561“,”最后一次updt“:”2018-07-17 15:31:30.0“,”地区id“:”1“,”北部“:”42.026444“,”南“:”41.997946“,”地区“:”罗杰斯公园-西岭“,”西部“:”87.709645“,”地区描述“:”德文郡北部。凯兹至湖岸“)"例如,元素之间没有换行符。但仍然不知道如何处理数组。重新分类:我现在可以插入单个json对象,但不能插入数组。从我的初始对象中,我必须删除所有换行符,并将整个内容压缩到一行。我认为这很奇怪,但它至少可以工作。请针对新问题发布一个新问题-和pl轻松,如果您不使用Pub/Sub或Dataflow直接导入到BigQuery中,请说明。非常有趣。谢谢你。我有一个巨大的对象,作为数组接收。现在我需要以某种方式将其转换为非数组。顺便说一句,BQ不应该也能处理数组吗?我希望这是一个非常常见的场景,里面没有数组支持对象。它将转换为BigQuery中的重复字段。但不接受对象外的数组。严格来说,您不能将JSON对象作为数组接收。JSON对象始终以“{”开头。JSON对象可以具有数组属性:{“string_array”:[“apple”,“banana”]}。供参考:如果要转换大文件,该怎么办?假设文件大小为~7GB,似乎此命令不起作用。有什么建议吗?在mac os上,我没有安装jq(找不到命令),所以我运行了brew install jq