You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jq解析数组JSON时未得预期结果,求技术指导

解决jq解析嵌套数组JSON的问题

嘿,我来帮你搞定这个jq解析的问题!先把你提供的JSON结构贴出来方便参考:

{ 
  "id": "8a9o0laf3ff0", 
  "displayId": "8a0a", 
  "author": { 
    "name": "Rahul", 
    "emailAddress": "donotreply@mail.com" 
  }, 
  "authorTimestamp": 1524168139000, 
  "message": "SD-90", 
  "parents": [ 
    { 
      "id": "8c1679f0813c", 
      "displayId": "8c0f", 
      "author": { 
        "name": "Sahotay", 
        "emailAddress": "donotreply@mail.com" 
      }, 
      "authorTimestamp": 1523544887000, 
      "message": "Fixing issues in SD-88", 
      "parents": [ { "id": "..." } ] 
    } 
  ] 
}

这类嵌套parents数组的结构,核心是用jq的递归或者精准定位语法来处理,我给你几个常见场景的解决方案:

1. 提取所有层级的特定字段(比如所有message)

如果想把最外层和每一层parents里的message都捞出来,用递归遍历就很方便:

jq 'recurse(.parents[]?) | .message' your_json_file.json

执行后会输出:

"SD-90"
"Fixing issues in SD-88"

recurse(.parents[]?)会自动遍历所有嵌套的parents数组元素,然后我们只取每个元素的message字段。

2. 提取特定层级的字段(比如第一层parents的作者信息)

如果只需要第一层parents里的作者姓名和邮箱,直接精准定位就行:

jq '.parents[] | .author' your_json_file.json

输出结果:

{
  "name": "Sahotay",
  "emailAddress": "donotreply@mail.com"
}

要是只想单独取姓名,改成.parents[] | .author.name就可以了。

3. 递归提取所有层级的ID

如果要把最外层和所有嵌套parents里的id都列出来:

jq 'recurse(.parents[]?) | .id' your_json_file.json

输出会是:

"8a9o0laf3ff0"
"8c1679f0813c"
"..."

4. 扁平化输出所有层级的完整对象

如果想把每个层级的完整对象都单独输出,方便后续处理:

jq 'recurse(.parents[]?)' your_json_file.json

这样会依次输出最外层对象、第一层parents对象、第二层parents对象(就是那个id为...的)。

如果你的需求更具体(比如只提取某几层、组合多个字段),可以调整上面的表达式就行!

内容的提问来源于stack exchange,提问作者Rahul Sahotay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:13:33