json - 如果嵌套数组为空,jq 不返回任何内容
问题描述
这里填充了数组 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"
}
]
你可以在这里看到缺少的键被设置为空。
$ 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 的空值,它会清除所有数据。
$ 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) })
推荐阅读
- python - 带有自我参数的装饰器的单元测试
- python - python2和python3 multiprocessing.process问题
- haskell - 在haskell中解析arg =“value”之类的args的更好方法是什么?
- pip - 无法使用 ansible pip 模块删除 docker-py
- regex - 选择字符串,搜索一个值,如果找到则搜索第二个。如果两者都找到存储结果
- asp.net-core - ASP.Net Core SignalR 是否支持 W3C 跟踪上下文或任何类型的分布式跟踪?
- azure - 每个用户的不同变量
- python - 为营销组合模型准备时间序列数据
- python - 如何在 Python 中获得与在 Excel 中使用 Sumif 相同的结果?
- r - R:如何始终在 Plotly Chloropleth 地图上显示美国州名?