JMESPath能否更新JSON对象?如何为people.data新增field1属性
JMESPath是否支持JSON更新操作?
JMESPath 原生完全不支持对JSON对象的新增、修改、删除这类更新操作。
JMESPath从设计之初就是只读的JSON查询语言,核心能力是从现有JSON结构中检索、过滤、提取目标数据,所有表达式执行过程都不会改动原始输入的JSON内容,没有提供任何写入类的语法规则。
对应新增属性需求的实现方案
你给出的JSON结构中people字段是数组类型,并非单个对象,不存在直接的people.data单节点路径,实际要操作的是people数组下每个元素内嵌的data对象。
要实现给该路径下新增"field1": "value1"的需求,通用做法是两步:
- 第一步:用JMESPath表达式
people[].data定位到所有需要修改的目标data节点 - 第二步:配合你当前使用的编程语言的原生JSON处理能力,给每个匹配到的
data对象追加field1属性即可
修改完成后的正确JSON结构如下:
{ "people": [ { "age": 20, "other": "foo.aaa", "name": "Bob", "data":{ "field":"value", "field1": "value1" } } ] }
不要尝试用JMESPath的投影、多字段合并类查询语法直接模拟修改效果,这类语法只会生成查询阶段的临时结果结构,无法按指定路径回写原始JSON,很容易出现整体结构错位的问题。
内容的提问来源于stack exchange,提问作者Devi
相关产品推荐
相关产品推荐

