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

如何用jq将字体对应char字段值拼接为字符串并生成映射

用JQ实现按字体聚合字符拼接

输入JSON数据:

{
    "font1": {
        "charInfo": [
            {
                "char": "a",
                "other_stuff": 12
            },
            {
                "char": "b",
                "other_stuff": 63
            }
        ]
    },
    "font2": {
        "charInfo": [
            {
                "char": "s",
                "other_stuff": 1
            },
            {
                "char": "x",
                "other_stuff": 4
            }
        ]
    }
}

期望输出:

{
    "font1": "ab",
    "font2": "sx"
}

你当前的jq命令生成的是包含font和chars字段的独立对象,无法直接将font值转为键名。可以通过JQ的动态键构造语法解决这个问题,下面提供两种可行的命令:

方法一:借助to_entries/from_entries转换

jq 'to_entries | map({key: .key, value: .value.charInfo | map(.char) | join("")}) | from_entries'

步骤说明:

  1. to_entries:将原对象转为[{key: "font1", value: {...}}, ...]的数组结构,便于逐个处理字体项。
  2. map(...):遍历每个条目,提取charInfo中的char字段并拼接成字符串:
    • .value.charInfo | map(.char):从每个字体的charInfo数组中取出所有char值,得到字符数组(如["a", "b"])。
    • join(""):将字符数组拼接为连续字符串(如"ab")。
  3. from_entries:把处理后的条目数组重新转换为键值对对象,得到最终格式。

方法二:直接构建动态键对象并合并

jq '[keys[] as $k | {($k): .[$k].charInfo | map(.char) | join("")}] | add'

步骤说明:

  1. keys[] as $k:遍历原对象的所有键(font1、font2)。
  2. {($k): ...}:用括号包裹变量$k实现动态键名,对应的值为拼接后的字符字符串。
  3. add:将生成的多个单键对象合并为一个完整的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:47:15