Java如何接收JSON数组

在Java中接收JSON数组,通常使用第三方库如Jackson或Gson,通过ObjectMapperGson将JSON字符串解析为Java对象数组或集合(如List),ObjectMapper().readValue(jsonString, new TypeReference(){}),需确保JSON结构与目标类匹配。

在Java中接收JSON数组是前后端交互的常见需求,尤其在RESTful API开发中,以下是详细实现方案,涵盖主流库和实际应用场景:

Java如何接收JSON数组


核心工具库选择

Java解析JSON数组需借助第三方库,推荐两个权威工具:

  1. Jackson(Spring官方默认库,高性能)
  2. Gson(Google开发,简洁易用)

依赖引入

Maven配置:

<!-- Jackson -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>
<!-- Gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

JSON数组解析实战

场景1:直接解析JSON字符串

假设收到JSON数组:

[
  {"id": 1, "name": "产品A"},
  {"id": 2, "name": "产品B"}
]

使用Jackson解析:

import com.fasterxml.jackson.databind.ObjectMapper;
String json = "[{"id":1,"name":"产品A"},{"id":2,"name":"产品B"}]";
ObjectMapper mapper = new ObjectMapper();
// 解析为对象数组
Product[] products = mapper.readValue(json, Product[].class);
// 或解析为集合
List<Product> productList = mapper.readValue(json, new TypeReference<List<Product>>(){});

使用Gson解析:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
String json = "[{"id":1,"name":"产品A"},{"id":2,"name":"产品B"}]";
Gson gson = new Gson();
// 解析为对象数组
Product[] products = gson.fromJson(json, Product[].class);
// 或解析为集合
List<Product> productList = gson.fromJson(json, new TypeToken<List<Product>>(){}.getType());

实体类定义

public class Product {
    private int id;
    private String name;
    // 必须有无参构造函数 + getter/setter
}

场景2:Spring MVC接收HTTP请求中的JSON数组

在Controller中直接映射:

Java如何接收JSON数组

@RestController
public class ProductController {
    @PostMapping("/products")
    public ResponseEntity<String> addProducts(@RequestBody List<Product> products) {
        // Spring自动将JSON数组转为List<Product>
        products.forEach(product -> System.out.println(product.getName()));
        return ResponseEntity.ok("成功接收" + products.size() + "条数据");
    }
}

关键注解

  • @RequestBody:自动解析请求体中的JSON数据
  • 默认使用Jackson,无需手动解析

注意事项与最佳实践

  1. 字段匹配问题
    JSON字段名必须与Java实体类属性名一致(或通过@JsonProperty注解映射)。

  2. 空值处理
    在实体类中使用包装类型(如Integer代替int)避免JSON中null导致NPE。

  3. 异常捕获
    解析时需处理异常:

    try {
        List<Product> products = mapper.readValue(json, new TypeReference<>(){});
    } catch (JsonProcessingException e) {
        throw new RuntimeException("JSON解析失败: " + e.getMessage());
    }
  4. 性能优化

    • Jackson的ObjectMapper线程安全,建议复用实例
    • 大文件解析用JsonParser流式API(Jackson)减少内存占用
  5. 安全性
    禁止解析不可信来源的JSON!攻击者可能构造恶意数据消耗资源(如JSON Bomb攻击)。


常见问题排查

  • 报错:UnrecognizedPropertyException
    检查JSON字段是否在实体类中存在,或添加注解:

    Java如何接收JSON数组

    @JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知字段
    public class Product { ... }
  • 报错:InvalidFormatException
    JSON数据类型与Java字段类型不匹配(如字符串传入数值字段)。

  • Spring返回415错误
    确保HTTP请求头包含Content-Type: application/json


接收JSON数组的关键步骤:

  1. 引入Jackson或Gson依赖
  2. 定义与JSON结构匹配的Java实体类
  3. 通过库API或Spring注解解析数据
  4. 添加异常处理和安全性校验

根据项目需求选择工具:

  • Spring项目:直接用@RequestBody + Jackson(无需手动解析)
  • 非Spring环境:选Gson(API更简洁)或Jackson(性能更高)

引用说明:本文代码基于Jackson 2.15官方文档Gson官方指南验证,遵循Java 17语法规范,实体类需遵守JavaBean规范(无参构造 + getter/setter)。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/45977.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月4日 23:14
下一篇 2025年7月4日 23:19

相关推荐

  • Java项目导入乱码如何解决

    解决Java项目导入乱码需统一编码设置:检查源文件编码格式(如GBK、UTF-8),在IDE中调整项目编码与文件一致;修改编译器设置或转换文件编码格式即可修复。

    2025年6月14日
    200
  • 如何将英文Java改为中文版?

    修改英文版Java为中文,主要涉及开发环境界面汉化:,1. **IDE界面汉化**:在使用的Java开发工具(如Eclipse、IntelliJ IDEA)设置中,找到语言选项,切换为中文或安装对应中文语言包。,2. **安装中文语言包**:部分IDE需单独下载安装中文语言插件。,3. **操作系统支持**:确保操作系统语言和区域设置支持中文显示。

    2025年6月20日
    000
  • Java计算器显示区域如何制作

    在Java计算器中,显示框通常使用Swing的JTextField或JTextArea组件实现,需设置只读属性,绑定按钮事件处理器,实时更新表达式或结果文本,并处理数值格式与溢出逻辑。

    2025年5月30日
    300
  • 如何用Java快速生成EXE?

    使用Java生成exe文件需借助第三方工具(如Launch4j或jpackage),将编译的jar包与JRE捆绑打包成Windows可执行程序,本质是创建包含Java运行环境的原生启动器。

    2025年6月11日
    100
  • 如何快速学习Java三大框架

    先掌握Spring核心(IOC/AOP),再学SpringMVC处理Web请求,最后MyBatis操作数据库,理解各框架职责,动手整合项目实践,结合Spring Boot简化配置效率更高。

    2025年6月10日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN