json - 如果嵌套数组为空,jq 将不返回任何内容

标签 json linux 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"
  }
]

您可以在此处看到缺少的键仅设置为 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/

相关文章:

java - 如何告诉 Jersey 我的 MessageBodyWriter 在哪里?

javascript - 如何克隆 json 数组而不更改现有 json 数组的值

android - Linux API,即使使用正确的文件描述符和权限,Write() 也会失败

linux - Linux 中的 Dart 编辑器 “source not available”?

json - 使用 jq 或 Python 解析 JSON

python - 带有东方索引且索引等于行值的数据帧到 json

regex - grep 包括新行

json - jq - 将 json 转换为 csv - 如何将 "null"视为字符串?

json - 使用jq返回JSON对象中的具体信息

ios - 我们可以使用纯文本(无 JSON)发送推送通知负载吗?