1.2 JSON数据类型与Java类型对应关系

server/2025/2/13 13:47:44/

以下是 JSON数据类型与Java类型对照表 的详细说明,涵盖基础类型和常见复杂场景的映射关系:


一、基础类型映射

JSON 数据类型Java 类型示例说明
字符串String"name":"John"String name
布尔值boolean/Boolean"active":trueboolean active
数值int/Integer"age":25Integer age
long/Long"timestamp":1630454400000Long timestamp
double/Double"price":19.99Double price
BigDecimal"money":"123.456789"BigDecimal money(推荐处理高精度数值)
null任意对象可为null"address":nullAddress address = null

二、复合类型映射

JSON 结构Java 类型注意事项
对象(Object)自定义POJO类需字段名称匹配
{"name":"Lisa"}User{String name}
Map<String, Object>动态对象处理时使用
JSON.parseObject(jsonStr, Map.class)
数组(Array)List<T>/Set<T>需指定泛型类型
[1,2,3]List<Integer>
T[]原生数组支持
JSON.parseArray(jsonStr, Integer[].class)

三、特殊类型处理

1. 日期时间
  • JSON表示:字符串(需指定格式)
  • Java映射
    java">// 方式1:注解指定格式
    public class Order {@JSONField(format = "yyyy-MM-dd HH:mm:ss")private Date createTime;
    }// 方式2:全局配置
    JSON.config().setDateFormat("yyyy-MM-dd");
    
2. 枚举类型
  • JSON表示:字符串或ordinal数值
  • Java映射
    java">public enum Status { OPEN, CLOSED }// JSON字符串"OPEN" → Status.OPEN
    // JSON数值0 → Status.OPEN
    
3. 泛型集合
  • 类型擦除问题解决方案
    java">// 反序列化泛型集合
    List<User> users = JSON.parseObject(jsonStr, new TypeReference<List<User>>() {});
    

四、类型转换规则

1. 自动类型转换
JSON 类型 → Java 类型转换规则
字符串 → 数值尝试解析字符串内容("123"Integer 123
数值 → 字符串自动转为字符串表示(456"456"
布尔 → 数值true→1, false→0
2. 强制转换限制
  • 不兼容类型会抛出异常
    json">{"value": "abc"} → int value  // 抛出JSONException
    

五、最佳实践

  1. 数值类型选择

    • 金额/高精度数值 → BigDecimal
    • 时间戳 → Long
    • ID类数据 → String(避免前端数值精度丢失)
  2. 防御性编程

    java">// 使用包装类代替基本类型
    private Integer count;  // 允许null值
    
  3. 日期统一格式

    • 建议使用 ISO-8601 格式:"2023-08-20T14:30:00Z"

六、常见问题排查

1. 类型不匹配错误
java">// 错误示例:JSON数值超出int范围
// JSON: {"id": 3147483647}
public class Entity {private int id;  // 超出int最大值会导致数据错误
}

解决方案:改用Long类型

2. 泛型反序列化失败
java">// 错误写法:直接使用List.class
List<User> users = JSON.parseObject(jsonStr, List.class); // 得到List<JSONObject>!

正确写法:使用TypeReference


掌握这些映射关系,可以有效避免90%的JSON解析类型错误!建议结合fastjson2的注解系统进行更精细的类型控制。


http://www.ppmy.cn/server/167343.html

相关文章

unity 0基础自学2.1:unity 中button的各类状态

文章目录 1、Button的状态2、脚本中获取button的状态2.1 分析状态获取2.2 通过实现接口获取button的状态2.2.1 鼠标点击与释放2.2.2 高亮模式2.2.3 退出选中模式&#xff08;高亮状态&#xff09;2.2.4 选择模式selected2.2.5 退出选择模式 3、射线与UI交互设置3.1 Canvas中组件…

JavaScript系列(71)--函数式编程进阶详解

JavaScript函数式编程进阶详解 &#x1f3af; 今天&#xff0c;让我们深入探讨JavaScript函数式编程的进阶内容。函数式编程是一种强大的编程范式&#xff0c;它通过使用纯函数和不可变数据来构建可预测和可维护的应用程序。 函数式编程进阶概念 &#x1f31f; &#x1f4a1;…

从零到一:基于Rook构建云原生Ceph存储的全面指南(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件1&#xff09;Rook Operator2&#xff09;Rook Discover3&#xff09;Rook Agent 2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.3 获取…

Redis主从架构同步原理

主从复制概述 有了AOF和RDB&#xff0c;如果Redis发生了宕机&#xff0c;它们可以分别通过回放日志和重新读入RDB文件的方式恢复数据&#xff0c;从而保证尽量少丢失数据&#xff0c;提升可靠性。但是如果Redis实例宕机了&#xff0c;就无法提供服务了。 既然⼀台宕机了⽆法提…

go 语言设置 商城首页

1&#xff1a;前端传递的数据结构: {"page_type": 10,"page_name": "商城首页","page_data": {"page": {"params": {"name": "商城首页","title": "萤火商城2.0","…

数据库的基本概念

在当今的信息时代&#xff0c;数据已成为企业乃至整个社会的重要资产。如何有效地存储、管理和利用这些数据成为了技术发展的关键领域之一。数据库系统作为数据管理的核心工具&#xff0c;在软件开发、数据分析等多个方面扮演着不可或缺的角色。本文将带你了解数据库的一些基本…

Redis 常见面试题汇总(持续更新)

文章目录 01、Redis 支持哪些数据类型&#xff1f;02、谈谈对 Redis 的 AOF 机制的 rewrite 模式的理解&#xff1f;03、请列举几个 Redis 常见性能问题和解决方案04、Redis 使用的最大内存是多少&#xff1f;内存数据淘汰策略有哪些&#xff1f;05、请谈谈 Redis 的同步机制。…

DeepSeek的蒸馏技术:让模型推理更快

DeepSeek系列模型&#xff0c;如DeepSeek-R1-Distill-Qwen-7B&#xff0c;采用了知识蒸馏&#xff08;Knowledge Distillation&#xff09;技术&#xff0c;这是一种强大的模型压缩和优化方法。通过蒸馏&#xff0c;DeepSeek模型在保持甚至提升性能的同时&#xff0c;实现了更快…