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

jq技术问题:如何为对象值数组元素添加父键并转为对象数组

使用jq转换JSON结构:将数组元素转为带父键的对象数组

原始JSON格式

{
    "key1" : [
        "key1item1",
        "key1item2",
        "key1item3",
        "key1item4"
    ],
    "key2" : [
        "key2item1",
        "key2item2"
    ]
}

期望转换结果

{
    "key1" : [
        {
            "parent": "key1",
            "key": "key1_key1item1",
            "value": "key1_item1"
        },
        {
            "parent": "key1",
            "key": "key1_key1item2",
            "value": "key1_item2"
        },
        {
            "parent": "key1",
            "key": "key1_key1item3",
            "value": "key1_item3"
        }
    ],
    "key2" : [
        {
            "parent": "key2",
            "key": "key2_key2item1",
            "value": "key2_item1"
        },
        {
            "parent": "key2",
            "key": "key2_key2item2",
            "value": "key2_item2"
        }
    ]
}

实现的jq命令

jq 'to_entries | map({key: .key, value: .value[] | {parent: .key, key: "\(.key)_\(.)", value: "\(.key)_\(. | sub("^\\w+"; ""))"}}) | from_entries' input.json

命令拆解

  • to_entries:把原始键值对对象转成[{key: "key1", value: [...]}, ...]的数组结构,方便同时获取父键和对应元素数组
  • map(...):遍历每个键值对,逐个处理数组元素:
    • .value[]:展开数组里的每个元素,单独进行对象转换
    • parent: .key:直接将当前父键赋值给parent字段
    • key: "\(.key)_\(.)":用父键和当前元素拼接成新的key字段值
    • value: "\(.key)_\(. | sub("^\\w+"; ""))":通过正则sub去掉元素开头的连续字母部分(比如key1item1去掉key1得到item1),再和父键拼接成value字段值
  • from_entries:把处理后的数组转换回原始的键值对对象结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:20:47