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

如何使用JayWay JsonPath向JSON数组中插入JSON对象?

正确使用JayWay JsonPath向JSON数组插入对象的方法

我正在使用JayWay JsonPath操作JSON对象,想要将一个JSON对象插入到JSON数组中,期望效果如下:

操作前

{
  "students": []
}

操作后

{
  "students": [{"id": 1, "name": "Bob"}]
}

但尝试了两种方式都没成功:

问题1:传入字符串导致插入的是字符串而非JSON对象

var context = JsonPath.parse("{\"students\":  []}");
context.add("students", "{\"id\":  1, \"name\":  \"Bob\"}");

System.out.println(context.jsonString());
// 输出: {"students":["{\"id\":  1, \"name\":  \"Bob\"}"]}

问题2:传入JsonPath解析上下文得到空对象

var context = JsonPath.parse("{\"students\":  []}");
context.add("students", JsonPath.parse("{\"id\":  1, \"name\":  \"Bob\"}"));

System.out.println(context.jsonString());
// 输出: {"students":[{}]}

正确解决方案

context.add()方法需要接收Java对象或已解析的JSON节点数据,而非字符串或JsonPath上下文对象,以下是几种可行方式:

方式1:将JSON字符串解析为Map后添加

var context = JsonPath.parse("{\"students\":  []}");
// 解析JSON字符串为Map类型的对象
Map<String, Object> student = JsonPath.parse("{\"id\":  1, \"name\":  \"Bob\"}").read("$");
context.add("students", student);

System.out.println(context.jsonString());
// 输出: {"students":[{"id":1,"name":"Bob"}]}

方式2:通过JsonProvider构建JSON对象

var context = JsonPath.parse("{\"students\":  []}");
JsonProvider provider = JsonProviderFactory.createProvider();
// 创建空的JSON对象
Object student = provider.createMap();
// 为对象设置属性
provider.set(student, "id", 1);
provider.set(student, "name", "Bob");

context.add("students", student);

System.out.println(context.jsonString());
// 输出: {"students":[{"id":1,"name":"Bob"}]}

方式3:使用自定义实体类对象

如果有对应的实体类,直接传入实体对象即可:

// 定义实体类
class Student {
    private int id;
    private String name;

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // 需提供getter方法,否则序列化可能失败
    public int getId() { return id; }
    public String getName() { return name; }
}

// 使用实体类插入
var context = JsonPath.parse("{\"students\":  []}");
context.add("students", new Student(1, "Bob"));

System.out.println(context.jsonString());
// 输出: {"students":[{"id":1,"name":"Bob"}]}

为什么之前的方法失败?

  • 传入字符串时,JsonPath会将其视为普通字符串值处理,不会自动解析为JSON对象。
  • 传入JsonPath.parse()返回的DocumentContext时,JsonPath无法正确序列化该上下文对象,因此得到空对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:40