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

如何使用JMESPath替换JSON中的指定格式键名

使用JMESPath批量重命名JSON中的特定键名

针对你提供的JSON结构,要批量将contents对象中所有格式为Prop_NNN的键名替换为NNN,同时保留其他结构不变,可以使用以下JMESPath表达式实现:

{
  aaa: aaa,
  bbb: bbb,
  Date: Date,
  ccc: ccc,
  ddd: ddd,
  contents: merge(
    # 保留contents中不以Prop_开头的键值对
    contents.*|keys(@)|[?starts_with(@, 'Prop_') == `false`]|{@: contents[@]},
    # 处理Prop_开头的键,提取下划线后的部分作为新键
    contents.*|keys(@)|[?starts_with(@, 'Prop_')]|{split('_', @)[1]: contents[@]}
  )
}

表达式说明

  1. 顶级键(aaa/bbb/Date/ccc/ddd)直接原样映射,保持原有值不变。
  2. 处理contents对象时,通过merge合并两组结果:
    • 第一组筛选出contents中不以Prop_开头的键,生成对应的键值对保留。
    • 第二组筛选出以Prop_开头的键,用split('_', @)[1]拆分键名并提取下划线后的部分作为新键,对应值保持不变。

使用示例

假设你的JSON文件名为input.json,使用支持JMESPath的命令行工具(如jp)执行以下命令即可得到预期输出:

jp -f input.json "{aaa: aaa, bbb: bbb, Date: Date, ccc: ccc, ddd: ddd, contents: merge(contents.*|keys(@)|[?starts_with(@, 'Prop_') == `false`]|{@: contents[@]}, contents.*|keys(@)|[?starts_with(@, 'Prop_')]|{split('_', @)[1]: contents[@]})}"

预期输出

{
  "aaa": 5,
  "bbb": 41,
  "Date": "2024-02-29T16:00:33.994Z",
  "ccc": 1,
  "ddd": 1,
  "contents": {
    "aaa": "Order1",
    "201": 788,
    "202": 839
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:11:06