我正在使用jq将嵌套.json文件转换为.csv,但是,当我在JSON 中有特定的键,值时似乎存在问题。我使用的脚本来自这个答案,如果我从输入文件中删除一行,它就可以工作。
错误:
jq: error (at example.json:0): object ({"favicon":...) is not valid in a csv row
Run Code Online (Sandbox Code Playgroud)
错误消息不是很具有描述性,因为它提到的对象似乎不是罪魁祸首。
json2csv.jq
paths as $path
| {path: $path, value: getpath($path)}
| select(.value|type == "object" )
| select( [.value[]][0] | type != "object")
| .path + ([.value[]])
| @csv
Run Code Online (Sandbox Code Playgroud)
example.json(通过https://jsonlint.com验证):
{
"items": [
{
"id": 1234,
"title": "Title of Item",
"internet": {
"favicon": "https://example.com/icon.png",
"domain": "https://example.com"
},
"image": {
"gif": null,
"main": "https://example.com/image_large.png"
},
"description": {
"origin": null,
"resource": null
},
"referral": {
"owner": null,
"name": null
},
"url": "https://example.com/image.png?version=1"
}
],
"other": {
"data": 0,
"notes": 1,
"total": 1,
"misc": 1
}
}
Run Code Online (Sandbox Code Playgroud)
从JSON中删除以下内容不会引发错误jq:
, "url": "https://example.com/image.png?version=1"
Run Code Online (Sandbox Code Playgroud)
调用:
$ jq -er -f json2csv.jq example.json
Run Code Online (Sandbox Code Playgroud)
我无法真正更改.json文件,因为它需要有问题的行,所以我正在寻找jq.
二者@tsv并@csv要求其输入为平坦的阵列(即,原子值数组)。有很多(无限多?)“扁平化”对象和数组的方法,所以在不知道你期望什么的情况下,我只是在胡乱猜测。
如果你想要一个疯狂的猜测,替换.path + [.value[]]为
.path + [.value[]|tostring]
Run Code Online (Sandbox Code Playgroud)
至少这将始终有效(假设输入是有效的 JSON),同时产生易于阅读的结果。
| 归档时间: |
|
| 查看次数: |
3341 次 |
| 最近记录: |