加载到Google Big Query中时,JSON格式错误

时间:2018-07-17 22:01:58

标签: json google-bigquery

我正在尝试使用内置的数据流模板在PUBSUB中的Big Query中加载以下数据:

reshape

但我一直收到此错误:

  

“读取数据时出错,错误消息:无法解析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"
}

]

但是我得到了这个错误:

  

读取数据时出错,错误消息:无法解析JSON:否   启动新数组时找到对象。 BeginArray返回false;   解析器在字符串结尾之前终止

我在这里做什么错了?

2 个答案:

答案 0 :(得分:7)

是的,BigQuery仅接受换行符分隔的JSON,这意味着每行一个完整的JSON对象。在将对象合并到一行之前,BigQuery读取“ {”(它是对象的开始),并期望读取一个键,但是该行结束了,因此您会看到错误消息“ expected key”。

对于多个JSON对象,只需将它们放在每一行中。不要将它们包含在数组中。 BigQuery希望每一行都以对象“ {”开头。如果将“ [”作为第一个字符,则会看到第二条错误消息,这意味着BigQuery读取数组,但不在对象内部。

答案 1 :(得分:4)

要将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"}

(请参阅https://stackoverflow.com/a/51301075/132438