使用jq过滤Google Maps API JSON后格式错误,无法导入Tableau求助
解决jq处理JSON后格式错误无法导入Tableau的问题
问题场景
使用以下jq命令过滤Google Maps API获取的JSON文件,仅保留位于Bern的地点:
jq '.[] | select(.vicinity|contains("Bern"))' Bern.json > Bern_test.json
将生成的Bern_test.json导入Tableau时提示格式错误,在线JSON校验器报错:
Error: Parse error on line 38:... Wohlen bei Bern"} { "business_status"----------------------^Expecting 'EOF', '}', ',', ']', got '{'
错误片段如下:
"reference": "ChIJ-abNilA5jkcRAh6Jj7dLx_c", "scope": "GOOGLE", "types": [ "restaurant", "food", "point_of_interest", "establishment" ], "vicinity": "Aumattweg 22, Wohlen bei Bern" } { "business_status": "OPERATIONAL", "geometry": { "location": { "lat": 46.9684408, "lng": 7.377661100000001
问题原因
原jq命令的输出是多个独立的JSON对象,彼此之间没有逗号分隔,也没有被数组[]包裹。而JSON语法要求顶级结构只能是单个对象或数组,多个对象直接拼接会导致格式不合法,这就是校验器和Tableau报错的核心原因。
解决方法
修改jq命令,将过滤后的结果包裹在数组中,确保输出合法的JSON结构:
jq '[.[] | select(.vicinity|contains("Bern"))]' Bern.json > Bern_test.json
命令说明
- 外层的
[]会把所有匹配的JSON对象收集成一个数组 - 数组内的对象会自动用逗号分隔,完全符合JSON语法规范
执行这个命令后,生成的Bern_test.json会是一个标准的JSON数组,可正常导入Tableau并通过JSON校验。
内容的提问来源于stack exchange,提问作者milami
相关产品推荐
相关产品推荐

