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

如何从嵌套JSON中提取特定对象?是否需使用Jackson库?

提取JSON特定分支的实现方案

首先明确:提取JSON特定分支不需要强制依赖Jackson库,有多种可行方案,下面分场景说明:

一、使用Jackson实现(推荐,适合复杂场景)

如果项目中已经在用Jackson,这是很便捷的方式,有两种常见思路:

  1. 通过POJO映射过滤
    定义一个只包含prop1和prop3的实体类,直接把原JSON反序列化到该类,再序列化就能得到目标JSON:
import com.fasterxml.jackson.databind.ObjectMapper;

class TargetDTO {
    private String prop1;
    private Prop3 prop3;

    // 省略getter、setter、构造方法
    static class Prop3 {
        private String child;
        // 省略getter、setter
    }
}

public class JsonExtract {
    public static void main(String[] args) throws Exception {
        String originalJson = "{\"prop1\":\"val1\",\"prop2\":{\"child\":\"childval\"},\"prop3\":{\"child\":\"childval\"}}";
        ObjectMapper mapper = new ObjectMapper();
        TargetDTO target = mapper.readValue(originalJson, TargetDTO.class);
        String resultJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(target);
        System.out.println(resultJson);
    }
}
  1. 通过树模型手动提取
    利用Jackson的JsonNode树结构,按需提取指定节点后组装成新JSON:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class JsonExtract {
    public static void main(String[] args) throws Exception {
        String originalJson = "{\"prop1\":\"val1\",\"prop2\":{\"child\":\"childval\"},\"prop3\":{\"child\":\"childval\"}}";
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readTree(originalJson);
        
        ObjectNode result = mapper.createObjectNode();
        result.set("prop1", root.get("prop1"));
        result.set("prop3", root.get("prop3"));
        
        String resultJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result);
        System.out.println(resultJson);
    }
}

二、不使用Jackson的替代方案

1. 使用Java原生JSON API(JDK 11+)

JDK 11及以上自带javax.json包,无需额外依赖就能处理:

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
import java.io.StringWriter;

public class JsonExtract {
    public static void main(String[] args) {
        String originalJson = "{\"prop1\":\"val1\",\"prop2\":{\"child\":\"childval\"},\"prop3\":{\"child\":\"childval\"}}";
        try (JsonReader reader = Json.createReader(new StringReader(originalJson))) {
            JsonObject root = reader.readObject();
            JsonObject result = Json.createObjectBuilder()
                    .add("prop1", root.getString("prop1"))
                    .add("prop3", root.getJsonObject("prop3"))
                    .build();
            
            StringWriter writer = new StringWriter();
            Json.createWriter(writer).writeObject(result);
            System.out.println(writer.toString());
        }
    }
}

2. 使用Gson库

如果项目用Gson,也能轻松实现:

import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class JsonExtract {
    public static void main(String[] args) {
        String originalJson = "{\"prop1\":\"val1\",\"prop2\":{\"child\":\"childval\"},\"prop3\":{\"child\":\"childval\"}}";
        Gson gson = new Gson();
        JsonObject root = gson.fromJson(originalJson, JsonObject.class);
        
        JsonObject result = new JsonObject();
        result.add("prop1", root.get("prop1"));
        result.add("prop3", root.get("prop3"));
        
        System.out.println(gson.toJson(result));
    }
}

总结

  • 若项目已经引入Jackson,用它处理高效且符合现有技术栈;
  • 不想加额外依赖的话,JDK 11+的原生API就能满足需求;
  • 其他JSON库如Gson也能实现相同效果,完全不需要局限于Jackson。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:17:50