我有一个json文件,其中包含有关图像文件的大量数据。它具有以下结构:
[
{
"id": 1,
"graphic": "filename",
"export_params": {
"uses": [
"string"
]
}
},
{
"id": 2,
"graphic": "filename2",
"export_params": []
},
...
]
此数组中的大多数对象都有完整的export_params
信息,但有时它只是空数组。我已经尝试过使用这个jq查询
.[] | [.id, .graphic, .export_params.uses[], .export_params.export_type ] | @csv
将其转换为csv,但是它中断了一行,在那找到了第一个“空export_params
”键。我该如何绕过不同对象类型的问题(大多数情况下是对象,如果为空,则为数组-我认为这是导致查询失败的原因)?
答案 0 :(得分:1)
这个问题的简单部分是处理空数组和缺少“ export_type”值,例如
.[]
| [.id,
.graphic,
(.export_params.uses?[] // ""),
(.export_params.export_type? // "") ]
| @csv
但是如果.uses
是其中包含多个项目的数组怎么办?这可能意味着数量可变的值
在行中,这可能会导致问题。
要只考虑.uses
中的第一项,可以使用first
:
.[]
| [.id,
.graphic,
first(.export_params.uses?[] // ""),
(.export_params.export_type? // "") ]
| @csv
为避免混乱,最好在查询对象之前先对其进行调整,例如遵循以下原则:
.[]
| .export_params |= (if . == [] then {uses: [""]} else . end)
| [.id,
.graphic,
.export_params.uses[0],
.export_params.export_type ]
| @csv