我想要做的是在我的json上‘遍历’,并 for each 名为‘base’的键添加一个键,它是这个键的完整‘路径’.

This is my JSON:

{
  "entity": {
    "product": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": ["product", "products", "pdt", "pdts"]
      }
    },
    "rabbit": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": ["rabbit", "rabbits"]
      }
    }
  }
}

And I want a result like this :

{
  "entity": {
    "product": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": ["product", "products", "pdt", "pdts"],
        "path": "entity.product.title"
      }
    },
    "rabbit": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": ["rabbit", "rabbits"]
        "path": "entity.rabbit.title"
      }
    }
  }
}

实际上,我做到了这一点,但我只得到了一个子密钥:

walk(if type == "object" and .base then  keys[] as $k | .base |= {path: $k} else . end)

结果:

{
  "entity": {
    "product": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": {
          "path": "base"
        }
      }
    },
    "rabbit": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": {
          "path": "base"
        }
      }
    }
  }
}

我还try 了这个:

walk(if type == "object" and .base then  paths(..) as $v | .base |= {path: $v} else . end)

结果:

{
  "entity": {
    "product": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": {
          "path": [
            "base",
            3
          ]
        }
      }
    },
    "rabbit": {
      "att": {
        "number_of_values": "Number of values"
      },
      "title": {
        "base": {
          "path": [
            "base",
            1
          ]
        }
      }
    }
  }
}

我们非常感谢您的建议和专业知识!

推荐答案

这里有一种方法:

reduce paths(objects | has("base")) as $p (.;
  setpath($p + ["path"]; $p | join("."))
)

Online demo

Json相关问答推荐

为什么terraform不缩小这个策略JSON?'

从JSON格式提取数据时分隔通用名称

JQ如何获取特定子元素的所有父母

419(未知状态)使用laravel处理PUT请求

bash用jq获取第二条JSON记录

jq: Select 何时来自另一个数组的值与此 json 中的值匹配

ETCD 导出为 json 并从 base64 解码所有键/值到人类可读

jq json - 按键名 Select

如何在jolt中使用shift和modify-overwrite-beta

JOLT 在 struct 体中间添加一个 JSON 字段

Oracle Apex - 将 JSON 对象分配给变量以返回

jq搜索特定字符串并输出对应的父值

Flutter:在本地文件 json 中搜索特殊的阿拉伯字符

使用 System.Text.Json 序列化记录成员

如何使用 jq 将 JSON 对象流转换为数组

在 Django 1.9 中,使用 JSONField(本机 postgres jsonb)的约定是什么?

如何向(JSON)对象的原型添加方法?

如何在 Django JSONField 数据上聚合(最小/最大等)?

杰克逊:反序列化 for each 值都具有正确类型的 Map

将 json 转换为 C# 数组?