浅析Java中如何处理接口返回的JSON数据

 更新时间:2026年04月02日 09:02:48   作者:lifewange  
在 Java 里处理接口返回的 JSON,最常用的是 Jackson 或 Gson 这两个库,下面小编将用最简单,最实用的方式教你,快跟随小编一起学习一下吧

在 Java 里处理接口返回的 JSON,最常用的是 JacksonGson 这两个库。下面我用最简单、最实用的方式教你:拿到接口返回的 JSON 字符串 → 转成 Java 对象 / Map → 直接取值。

一、先引入依赖(二选一)

1. 使用 Jackson(Spring 默认,最常用)

Maven:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

2. 使用 Gson(谷歌出品,轻量)

Maven:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

二、假设接口返回 JSON 如下

{
  "code": 200,
  "msg": "请求成功",
  "data": {
    "id": 1001,
    "username": "zhangsan",
    "age": 25
  }
}

三、方式 1:JSON → Java 对象(最规范)

1. 先建实体类

import lombok.Data;
// 整体返回结构
@Data
public class ApiResult {
    private Integer code;
    private String msg;
    private User data;
}
// data 里的用户对象
@Data
public class User {
    private Integer id;
    private String username;
    private Integer age;
}

不用 Lombok 就手写 getter/setter。

2. Jackson 解析

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonTest {
    public static void main(String[] args) throws Exception {
        // 接口返回的 JSON 字符串
        String json = "{\"code\":200,\"msg\":\"请求成功\",\"data\":{\"id\":1001,\"username\":\"zhangsan\",\"age\":25}}";

        ObjectMapper mapper = new ObjectMapper();
        ApiResult result = mapper.readValue(json, ApiResult.class);

        // 直接取值
        System.out.println(result.getCode());    // 200
        System.out.println(result.getMsg());     // 请求成功
        System.out.println(result.getData().getUsername()); // zhangsan
    }
}

3. Gson 解析

import com.google.gson.Gson;

public class JsonTest {
    public static void main(String[] args) {
        String json = "{\"code\":200,\"msg\":\"请求成功\",\"data\":{\"id\":1001,\"username\":\"zhangsan\",\"age\":25}}";

        Gson gson = new Gson();
        ApiResult result = gson.fromJson(json, ApiResult.class);

        System.out.println(result.getCode());
        System.out.println(result.getData().getUsername());
    }
}

四、方式 2:JSON → Map(快速取值,不用建类)

适合不想写实体类、临时解析的场景。

Jackson 转 Map

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(json, Map.class);

int code = (int) map.get("code");
String msg = (String) map.get("msg");

Map<String, Object> data = (Map) map.get("data");
String username = (String) data.get("username");

Gson 转 Map

Gson gson = new Gson();
Map<String, Object> map = gson.fromJson(json, Map.class);

double code = (double) map.get("code"); // Gson 数字默认 double
String username = (String) ((Map) map.get("data")).get("username");

五、结合你刚才的 POST 请求完整示例

把 POST 请求 + JSON 解析放一起:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import com.fasterxml.jackson.databind.ObjectMapper;

public class PostWithJsonParse {
    public static void main(String[] args) throws Exception {
        String url = "https://httpbin.org/post";
        String jsonParams = "{\"username\":\"test\",\"password\":\"123456\"}";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .POST(HttpRequest.BodyPublishers.ofString(jsonParams))
                .header("Content-Type", "application/json")
                .build();

        // 获取返回 JSON
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        String json = response.body();

        // 解析 JSON
        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> resultMap = mapper.readValue(json, Map.class);

        System.out.println("url: " + resultMap.get("url"));
        System.out.println("data: " + resultMap.get("data"));
    }
}

六、常见小问题

字段名不一致:用 @JsonProperty("user_name")

JSON 数组:转 List<实体类>

JacksonList<User> list = mapper.readValue(json, new TypeReference<>(){});

null 值:解析不会报错,会自动为 null

到此这篇关于浅析Java中如何处理接口返回的JSON数据的文章就介绍到这了,更多相关Java处理接口返回的JSON数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA中使用Docker Compose容器编排的实现

    IDEA中使用Docker Compose容器编排的实现

    这篇文章主要介绍了IDEA中使用Docker Compose容器编排的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Eclipse Web项目打成war包的方法图解

    Eclipse Web项目打成war包的方法图解

    当Tomcat启动后该压缩文件自动解压缩,war包方便了web工程的发布,那么Eclipse中如何将Web项目打成war包呢?下面小编通过图文并茂的方式给大家讲解下Eclipse Web项目打成war包的方法,一起看看吧
    2016-08-08
  • Spring Boot中@Import三种使用方式实例详解

    Spring Boot中@Import三种使用方式实例详解

    这篇文章主要介绍了Spring Boot中@Import三种使用方式,主要有引入普通类,引入importSelector的实现类及引入importBeanDefinitionRegister的实现类,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2022-11-11
  • java比较两个list是否相同equals的代码详解

    java比较两个list是否相同equals的代码详解

    在本篇文章里小编给大家分享的是关于java比较两个list是否相同equals的代码详解,有需要的朋友们可以参考学习下。
    2020-02-02
  • 深入讲解基于JDK的动态代理机制

    深入讲解基于JDK的动态代理机制

    众所周知相比于静态代理,动态代理避免了开发人员编写各个繁锁的静态代理类,下面这篇文章主要给大家介绍了关于基于JDK的动态代理机制的相关资料,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • SpringBoot整合缓存方式(Caffeine、Redis)

    SpringBoot整合缓存方式(Caffeine、Redis)

    SpringBoot整合缓存注解包括@EnableCaching、@Cachable、@CachePut和@CacheEvict,分别用于配置缓存管理器和标记缓存操作,文章详细介绍了整合Caffeine和Redis缓存的步骤,并展示了配置类与控制层代码,优点是快速应用缓存,缺点是无法精细处理缓存
    2026-05-05
  • Java String源码contains题解重复叠加字符串匹配

    Java String源码contains题解重复叠加字符串匹配

    这篇文章主要为大家介绍了Java String源码contains题解重复叠加字符串匹配示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java实现航空航班管理系统

    Java实现航空航班管理系统

    这篇文章主要为大家详细介绍了Java实现航空航班管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 解决Eclipse Tomcat OutOfMemoryError:PermGen space的问题

    解决Eclipse Tomcat OutOfMemoryError:PermGen space的问题

    今天小编就为大家分享一篇关于解决Eclipse Tomcat OutOfMemoryError:PermGen space的问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系解析

    Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系解析

    在我们日常的开发中,我们经常会用到Filter和Interceptor,这篇文章主要介绍了Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系 ,需要的朋友可以参考下
    2022-10-10

最新评论