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

如何使用jq提取JSON中所有嵌套键值对并按指定格式输出?

问题

现有JSON数据:

{
  "outer1": {
    "outer2": {
      "outer3": {
        "key1": "value1",
        "key2": "value2"
      }
    },
    "outer4": {
      "key1": "value1",
      "key2": "value2"
    }
  }
}

期望输出格式:

[outer1.outer2.outer3]
key1 = value1
key2 = value2

[outer1.outer4]
key1 = value1
key2 = value2

之前尝试的jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' test.json无法得到目标格式,求正确的jq实现方案。

解决方案

使用以下jq命令即可生成符合要求的输出:

jq -r '
  def collect_object_paths:
    def recurse($current_path):
      . as $obj
      | if type == "object" then
          if ($obj | to_entries | length > 0) then
            $current_path
          end,
          ($obj | to_entries[] | .key as $k | ($obj[$k] | recurse($current_path + [$k])))
        else empty end;
    recurse([]);

  [collect_object_paths[] | select(length > 1)] as $target_paths
  | foreach $target_paths[] as $path (
      {};
      .path_str = ($path | join("."))
      | .content = getpath($path);
      "[" + .path_str + "]",
      (.content | to_entries[] | "\(.key) = \(.value)"),
      ""
    )
' test.json
说明
  1. collect_object_paths 自定义函数:递归遍历整个JSON结构,收集所有包含子键值对的对象的完整路径。
  2. 筛选目标路径:排除最顶层的outer1路径,只保留包含具体键值对的子对象路径(即outer1.outer2.outer3和outer1.outer4)。
  3. 生成输出格式:对每个目标路径,先输出带方括号的路径字符串,再逐行输出该对象下的键值对,最后用空行分隔不同对象块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:17:49