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

如何用JMESPath提取子对象键名及指定属性的键值对

使用JMESPath转换嵌套对象为指定数组格式

问题场景

给定如下JSON结构:

{
    "status": "VALUED",
    "prop_a": "something",
    "updated": "2024-04-15 09:16:55",
    "items": {
        "7": {
            "my_value": "value_one",
            "extra": "Mysterious Benefactor"
        },
        "15": {
            "my_value": "value_two",
            "extra": "Awesome Awesomeness"
        },
        "18": {
            "extra": "Dangling value"
        },
        "19": {
            "my_value": "value_three",
            "a_number": "42",
            "extra": "Skippy the Magnificent"
        }
    }
}

需要将items中的键值对转换为包含id(对应原键)和my_value的对象数组,可选择包含或排除无my_value的项。

解决方案

1. 仅保留存在my_value的项

使用以下JMESPath表达式:

items | entries(@) | [?value.my_value] | [{"id": key, "my_value": value.my_value}]

解析:

  • items | entries(@):将items对象转换为键值对数组,格式为[{"key": "7", "value": {...}}, ...]
  • [?value.my_value]:过滤出value中存在my_value字段的项
  • [{"id": key, "my_value": value.my_value}]:将每个键值对映射为目标格式的对象

执行后结果:

[
    {
        "id": "7",
        "my_value": "value_one"
    },
    {
        "id": "15",
        "my_value": "value_two"
    },
    {
        "id": "19",
        "my_value": "value_three"
    }
]

2. 包含所有项(无my_value的项设为null)

使用以下JMESPath表达式:

items | entries(@) | [{"id": key, "my_value": value.my_value || null}]

解析:

  • 同样先通过entries(@)转换为键值对数组
  • value.my_value || null:如果my_value不存在,自动填充为null

执行后结果:

[
    {
        "id": "7",
        "my_value": "value_one"
    },
    {
        "id": "15",
        "my_value": "value_two"
    },
    {
        "id": "18",
        "my_value": null
    },
    {
        "id": "19",
        "my_value": "value_three"
    }
]

关键说明

  • entries(@)是核心:它能将任意对象转换为键值对数组,完美解决原对象键不连续且需保留键作为id的需求
  • 表达式完全通用,不管items中有多少项都能正常处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:18:11