这里填充了数组 subThings
$ echo '[{"thing-1" : "meta1","thing-2" : "meta2","thing-n" : "metan","subThings":[{"subThing-1" : "subMeta1","subThing-2" : "subMeta2","subThing-n" : "subMetan"}]}]' | jq '.'
[
{
"subThings": [
{
"subThing-n": "subMetan",
"subThing-2": "subMeta2",
"subThing-1": "subMeta1"
}
],
"thing-n": "metan",
"thing-2": "meta2",
"thing-1": "meta1"
}
]
您可以在此处看到缺少的键仅设置为 null。
$ echo '[{"thing-1" : "meta1","thing-2" : "meta2","thing-n" : "metan","subThings":[{"subThing-1" : "subMeta1","subThing-2" : "subMeta2","subThing-n" : "subMetan"}]}]' |
jq '[.[] | {"thing-1","thing-5","subThing-2":.subThings[]["subThing-2"],}]'
[
{
"subThing-2": "subMeta2",
"thing-5": null,
"thing-1": "meta1"
}
]
此处数组 subThings 为空
$ echo '[{"thing-1" : "meta1","thing-2" : "meta2","thing-n" : "metan","subThings":[]}]' | jq '.'
[
{
"subThings": [],
"thing-n": "metan",
"thing-2": "meta2",
"thing-1": "meta1"
}
]
它会清除所有数据,而不是 subThing-2 的 null。
$ echo '[{"thing-1" : "meta1","thing-2" : "meta2","thing-n" : "metan","subThings":[]}]' |
jq '[.[] | {"thing-1","thing-5","subThing-2":.subThings[]["subThing-2"],}]'
[]
$
为什么?
有没有不同的方法来获取数据而不用空数组清除所有内容?
最佳答案
您正在尝试根据 subThings
对象的存在来生成对象。这实际上就是 .subThings[]
在 {"thing-1","thing-5","subThing-2":.subThings[]["subThing-2"]}
上下文中所做的事情。
您需要单独评估 subThings
,如果没有,则替换为 null
,否则它将只是 empty
,不会产生任何结果(这就是您在这里看到的)。
map({ "thing-1", "thing-5", "subThing-2": (.subThings[]."subThing-2" // null) })
关于json - 如果嵌套数组为空,jq 将不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160906/