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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:22:26