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

如何用jq将JSON对象键转为属性并转数组及逆向转换?

使用jq实现JSON结构的双向转换

原始JSON结构

{
  "item1": {
    "foo1": 1,
    "foo2": 2
  },
  "item2": {
    "foo1": 11,
    "foo2": 22
  }
}

正向转换:对象转带name属性的数组

要把上面的对象转换成包含name属性的JSON数组,用jq的entries方法就能搞定:

jq 'entries | map({name: .key} + .value)' input.json

逻辑说明:

  • entries:将原始键值对对象转换成[{"key": "item1", "value": {...}}, {"key": "item2", "value": {...}}]格式的数组
  • map(...):遍历数组每个元素,把key赋值给name字段,再和原value合并,生成目标结构

转换后结果:

[
  {
    "name": "item1",
    "foo1": 1,
    "foo2": 2
  },
  {
    "name": "item2",
    "foo1": 11,
    "foo2": 22
  }
]

逆向转换:数组转回原始对象

要把数组还原成最初的键值对结构,用reduce方法遍历数组构建对象即可:

jq 'reduce .[] as $item ({}; .[$item.name] = ($item | del(.name)))' array.json

逻辑说明:

  • reduce .[] as $item ({}; ...):以空对象为初始值,逐个遍历数组中的元素$item
  • .[$item.name] = ($item | del(.name)):把元素的name作为键,删除name字段后的剩余内容作为值,添加到初始对象中

执行后就能得到最开始的原始JSON结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:13:16