繁体   English   中英

jq:来自嵌套 JSON 的 Map

[英]jq: Map from nested JSON

我有以下 JSON:

{
  "A": {
    "type": "string",
    "value": "value_A"
  },
  "B": {
    "type": "string",
    "value": "value_B"
  }
}

...并尝试使用 JQ 来产生以下结果:

所需 Output

{
  "A": "value_A",
  "B": "value_B"
}

...其中键采用node.value的直接值。


我目前的尝试:

.[] | {value}

...返回以下内容:

{
  "value": "value_A"
}
{
  "value": "value_B"
}

如何使用 JQ 生产所需的 JSON?

你不需要with_entries

map_values(.value)

在线演示

with_entries帮助:

with_entries(.value |= .value)

to_entries | map(.value |=.value) | from_entries to_entries | map(.value |=.value) | from_entries

to_entries将形式为{a:b}的 object 转换为形式为[{key:a, value:b}]的数组,因此在您的示例中:

{
  "key": "A",
  "value": {
    "type": "string",
    "value": "value_A"
  }
}

.value |=.value然后将.value.value的内容分配给.value ,留下:

{
  "key": "A",
  "value": "value_A"
}

然后由 from_entries 再次转换为from_entries (从上面重复: with_entries(f)等效于from_entries|map(f)|from_entries

你的尝试

.[] | {value}

只是错过了更新分配。

这将按预期工作:

.[] |= .value
{
  "A": "value_A",
  "B": "value_B"
}

演示

使用 function map_values()

map_values(.value)

它运行作为参数传递给输入 object 的每个值的过滤器,收集结果并将它们与输入 object 的键相关联,并返回 object。

上网查一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM