java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java对象转JSON

Java对象与JSON互相转化的示例详解

作者:doublez234

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,下面我们就来聊聊Java对象与JSON如何互相转化吧

JSON概念

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON 基于 JavaScript(ECMAScript(欧洲计算机协会制定的js规范)) 编程语言的一个子集,但它是一种独立于语言的数据格式,被广泛应用于各种编程语言和平台之间的数据交换。

JSON 的主要特点:

轻量级: JSON 格式非常简洁,只包含必要的数据信息,减少了传输的数据量,提高了数据传输效率。

易于阅读和编写: JSON 的结构清晰,使用键值对的方式组织数据,易于人理解和编写。

易于解析和生成: 各种编程语言都提供了 JSON 解析器和生成器,方便程序处理 JSON 数据。

跨平台、跨语言: JSON 是一种与编程语言无关的数据格式,可以在不同的平台和编程语言之间进行数据交换。

数据结构: JSON 支持两种基本的数据结构:

JSON 的数据类型:

语法:

JSON 示例:

{
  "name": "张三",
  "age": 30,
  "city": "北京",
  "isStudent": false,
  "courses": ["语文", "数学", "英语"],
  "address": {
    "street": "XX大街",
    "zipcode": "100000"
  }
}

如何与Java对象进行转化

ObjectMapper 是 Jackson 库中的一个核心类,主要用于在 Java 对象(POJO,Plain Old Java Object)和 JSON 数据之间进行转换。 简单来说,它能帮你把 JSON 字符串变成 Java 对象,也能把 Java 对象变成 JSON 字符串。

ObjectMapper 的主要功能

为什么需要 ObjectMapper

ObjectMapper 的常用方法

writeValueAsString(Object value): 将 Java 对象转换为 JSON 字符串。

ObjectMapper mapper = new ObjectMapper();
MyObject obj = new MyObject("张三", 30);
String jsonString = mapper.writeValueAsString(obj);
System.out.println(jsonString); // 输出: {"name":"张三","age":30}

readValue(String content, Class<T> valueType): 将 JSON 字符串转换为 Java 对象。

ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"李四\",\"age\":25}";
MyObject obj = mapper.readValue(jsonString, MyObject.class);
System.out.println(obj.getName()); // 输出: 李四
System.out.println(obj.getAge());  // 输出: 25

易错点:

readValue(String content, TypeReference<T> valueTypeRef): 将 JSON 字符串转换为复杂的泛型类型(如 List 或 Map<K, V>)。

当你需要将一个 JSON 数组转换为 Java 的 List 集合时,你需要使用 TypeReference 来帮助 Jackson 保留泛型信息。

ObjectMapper mapper = new ObjectMapper();
String jsonArrayString = "[{\"name\":\"张三\",\"age\":30}, {\"name\":\"李四\",\"age\":25}]";

// 错误的做法:mapper.readValue(jsonArrayString, List.class);
// 这会导致 List 中的元素被解析为 LinkedHashMap,而不是 MyObject

// 正确的做法:使用 TypeReference
List<MyObject> userList = mapper.readValue(jsonArrayString, new TypeReference<List<MyObject>>() {});

System.out.println(userList.get(0).getName()); // 输出: 张三

readTree(String content): 将 JSON 字符串转换为 JsonNode 对象。 JsonNode 是 Jackson 库中表示 JSON 树结构的类,可以方便地访问 JSON 数据的各个部分。

ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"王五\",\"age\":40}";
JsonNode rootNode = mapper.readTree(jsonString);
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();
System.out.println(name); // 输出: 王五
System.out.println(age);  // 输出: 40

使用 ObjectMapper 的步骤

添加 Jackson 依赖: 在你的项目中添加 Jackson 库的依赖。 如果你使用 Maven,可以在 pom.xml 文件中添加以下依赖:(如果是Springboot项目那么其已经内置了,不需要再导入)

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.16.1</version>  <!-- 使用最新版本 -->
</dependency>

创建 ObjectMapper 对象

普通项目

ObjectMapper mapper = new ObjectMapper();

SpringBoot项目

正如前文所说,Spring Boot 已经为我们自动配置了一个 ObjectMapper Bean。因此,在 Spring Boot 项目中,我们不应该手动 new ObjectMapper(),而应该通过依赖注入(DI)来使用这个已经配置好的单例对象。

@Service
public class MyService {

    private final ObjectMapper objectMapper;

    // 通过构造函数注入(推荐)
    @Autowired
    public MyService(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    public void doSomething() {
        // 直接使用注入的 objectMapper 实例
        // ...
    }
}

调用 ObjectMapper 的方法进行 JSON 转换: 使用 writeValueAsString() 进行序列化,使用 readValue()readTree() 进行反序列化。

ObjectMapper 的高级用法

自定义序列化器和反序列化器: 可以自定义 JsonSerializerJsonDeserializer 来控制 JSON 转换的细节。

使用注解: 可以使用 Jackson 提供的注解 (例如 @JsonProperty, @JsonIgnore, @JsonFormat) 来配置 JSON 转换的行为。

配置 ObjectMapper: 可以通过 ObjectMapper 的配置方法 (例如 configure(), setPropertyNamingStrategy()) 来调整 JSON 转换的各种参数。

到此这篇关于Java对象与JSON互相转化的示例详解的文章就介绍到这了,更多相关Java对象转JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文