如何在Java中过滤JSON?提取指定字段的实现方法问询
Java实现JSON字段过滤(仅保留name和city)
给定原始JSON:
{ "name": "John", "age": 29, "city": "Bangalore", "country": "India" }
需要过滤后得到仅包含name和city的JSON:
{ "name": "John", "city": "Bangalore" }
下面提供几种常用的实现方式:
方案一:使用Jackson库
Jackson是Java生态中最常用的JSON处理库,Spring框架默认集成。
方式1:通过JsonNode手动提取字段
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; public class JsonFilterExample { public static void main(String[] args) throws Exception { String originalJson = "{\"name\":\"John\",\"age\":29,\"city\":\"Bangalore\",\"country\":\"India\"}"; ObjectMapper objectMapper = new ObjectMapper(); // 解析原始JSON为JsonNode JsonNode rootNode = objectMapper.readTree(originalJson); // 创建新的ObjectNode存储需要的字段 ObjectNode filteredNode = objectMapper.createObjectNode(); filteredNode.set("name", rootNode.get("name")); filteredNode.set("city", rootNode.get("city")); // 转换为格式化后的字符串输出 String filteredJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(filteredNode); System.out.println(filteredJson); } }
方式2:通过DTO映射(更适合业务场景)
定义一个仅包含目标字段的DTO类:
import com.fasterxml.jackson.databind.ObjectMapper; public class UserDto { private String name; private String city; // Jackson默认需要无参构造函数 public UserDto() {} // Getter和Setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } } // 处理逻辑代码 public class JsonFilterExample { public static void main(String[] args) throws Exception { String originalJson = "{\"name\":\"John\",\"age\":29,\"city\":\"Bangalore\",\"country\":\"India\"}"; ObjectMapper objectMapper = new ObjectMapper(); // 反序列化为DTO时自动忽略多余字段 UserDto userDto = objectMapper.readValue(originalJson, UserDto.class); // 再序列化为JSON字符串 String filteredJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(userDto); System.out.println(filteredJson); } }
方案二:使用Gson库
Gson是Google推出的轻量级JSON处理库。
方式1:手动提取字段
import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class GsonFilterExample { public static void main(String[] args) { String originalJson = "{\"name\":\"John\",\"age\":29,\"city\":\"Bangalore\",\"country\":\"India\"}"; // 解析原始JSON为JsonObject JsonObject originalObj = JsonParser.parseString(originalJson).getAsJsonObject(); // 创建新的JsonObject并添加目标字段 JsonObject filteredObj = new JsonObject(); filteredObj.add("name", originalObj.get("name")); filteredObj.add("city", originalObj.get("city")); // 输出结果 System.out.println(filteredObj.toString()); } }
方式2:通过DTO映射
定义DTO类:
import com.google.gson.Gson; public class UserDto { private String name; private String city; // Getter和Setter方法(Gson对无参构造函数要求宽松,建议保留) public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } } // 处理逻辑代码 public class GsonFilterExample { public static void main(String[] args) { String originalJson = "{\"name\":\"John\",\"age\":29,\"city\":\"Bangalore\",\"country\":\"India\"}"; Gson gson = new Gson(); // 反序列化为DTO时自动忽略多余字段 UserDto userDto = gson.fromJson(originalJson, UserDto.class); // 序列化为JSON字符串 String filteredJson = gson.toJson(userDto); System.out.println(filteredJson); } }
依赖说明
如果使用Maven,需要在pom.xml中添加对应依赖:
Jackson依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 可替换为最新稳定版本 --> </dependency>
Gson依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 可替换为最新稳定版本 --> </dependency>
内容的提问来源于stack exchange,提问作者Unknown
相关产品推荐
相关产品推荐

