json - 增加 jq 中的 arg

标签 json increment jq

我有这样的东西:

jq --arg START 10 '[.z[] | select(has("name")) | {id: $START | tonumber, name}]'

转换为带有“name”键的对象数组,附加增量 id,输出:

[
  {
    id: 10,
    name: "stuff"
  },
  {
    id: 10,
    name: "more stuff"
  }
]

如何增加 START arg 以使第二个对象的 id 为 11 等等?

编辑:我应该发布原始的 json:

{
  "u": "stuff",
  "x": [1,2,3],
  "y": {
    "field": "value"
  },
  "z": {
    "stuffWithoutName": {
       "ex": "stuff"
    },
    "zz": {
       "name": "change me",
       "more": "stuff"
    },
    "randomKey":  {
       "name": "change me",
       "random": "more stuff"
    }
  }
}

谢谢!

最佳答案

您可以使用to_entries,当给定一个数组时,它将给出每个项目的索引:

jq --arg START 10 '($START | tonumber) as $s
  | [.z[] | select(has("name"))]
  | to_entries
  | map({name:.value.name, id: ($s + .key) })'

这样,id就会从10 + 0变为10 + n

关于json - 增加 jq 中的 arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41431965/

相关文章:

php - 二维数组上的json_encode

java - 通过 JSON 从 Java 到 Javascript 的 Unicode 字符串

c++ - C 和 C++ 关于++ 运算符的区别

json - bash脚本将多个json文件合并成一个json

arrays - 如何在shell脚本中获取JSON中向量的大小?

json - 根据jq json中的where子句提取元素

java - 从此 JSON 日期中删除转义字符的简单方法

javascript - JS : how to convert a string to JS Object (**NOT** to JSON)?

javascript - 迭代 boolean 值的二维数组并返回基于 true/false 的递增值

java - 每循环 5 次迭代递增 int 变量 (JAVA)