java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JSON数据操作

Java中JSON数据操作与处理全面指南

作者:总是学不会.

JSON(JavaScript Object Notation)是数据交换的轻量级格式,它以易于人类阅读和机器解析的方式组织数据,基于键值对,在Java开发中,处理JSON数据通常涉及使用Jackson、Gson、Fastjson等库,本文给大家介绍JSON数据操作与处理全面指南,感兴趣的朋友一起看看吧

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端的数据传递和API通信中。它基于键值对的方式组织数据,便于人类阅读和机器解析。在Java开发中,处理JSON数据通常需要使用一些常见的库,如Jackson、Gson、Fastjson等。本篇将介绍JSON的基本概念、常用操作及在Java中的具体应用。

一、JSON的基本概念

JSON的数据结构包括两种:对象数组

对象:使用 {} 括起来,内部是键值对的集合,每个键和值之间用冒号 : 分隔,多个键值对之间用逗号 , 分隔。例如:

{
  "name": "Alice",
  "age": 25,
  "address": {
    "city": "New York",
    "zip": "10001"
  }
}

数组:使用 [] 括起来,内部是多个值,每个值之间用逗号分隔。例如:

[
  "apple",
  "banana",
  "cherry"
]

二、JSON处理常见库

1. Jackson

Jackson 是Java中处理JSON最常用的库之一,它能够轻松地将Java对象与JSON字符串互相转换,具备高效、灵活、功能强大的特点。

对象转JSON

ObjectMapper objectMapper = new ObjectMapper();
User user = new User("Alice", 25);
String jsonString = objectMapper.writeValueAsString(user);

JSON转对象

String jsonString = "{\"name\":\"Alice\", \"age\":25}";
User user = objectMapper.readValue(jsonString, User.class);

Jackson还支持复杂类型的解析、忽略字段、日期格式化等高级功能。

2. Gson

Gson 是由Google提供的另一款流行的JSON处理库。它以轻量、易用著称,适合处理简单的JSON数据结构。

对象转JSON

Gson gson = new Gson();
User user = new User("Bob", 30);
String jsonString = gson.toJson(user);

JSON转对象

String jsonString = "{\"name\":\"Bob\", \"age\":30}";
User user = gson.fromJson(jsonString, User.class);

Gson的API风格简单明了,但在性能上可能略逊于Jackson。

3. Fastjson

Fastjson 是阿里巴巴开源的高性能JSON库,特别在解析大量JSON数据时表现出色。

对象转JSON

User user = new User("Charlie", 28);
String jsonString = JSON.toJSONString(user);

JSON转对象

String jsonString = "{\"name\":\"Charlie\", \"age\":28}";
User user = JSON.parseObject(jsonString, User.class);

Fastjson支持丰富的序列化/反序列化选项,还能够处理JSONPath等高级功能。

三、JSON的常见操作

1. 解析复杂的JSON结构

通常我们处理的JSON不仅仅是简单的对象,还可能是嵌套的对象或数组。以Jackson为例,我们可以使用 TypeReference 来处理复杂的嵌套类型。

String jsonString = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
ObjectMapper mapper = new ObjectMapper();
List<User> users = mapper.readValue(jsonString, new TypeReference<List<User>>(){});

2. JSON与Map互转

在实际开发中,有时我们希望将JSON数据转为 Map<String, Object>,以便于动态操作数据。

JSON转Map

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "{\"name\":\"Alice\", \"age\":25}";
Map<String, Object> map = objectMapper.readValue(jsonString, new TypeReference<Map<String,Object>>(){});

Map转JSON

Map<String, Object> map = new HashMap<>();
map.put("name", "Alice");
map.put("age", 25);
String jsonString = objectMapper.writeValueAsString(map);

3. 处理日期和时间格式

JSON默认不支持日期格式,因此在处理日期类型的字段时需要特别处理。以Jackson为例,可以通过 @JsonFormat 注解指定日期格式。

public class Event {
  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
  private Date eventDate;
  // getters and setters
}

反序列化时,也可以全局配置 ObjectMapper 以处理日期格式:

ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));

4. 忽略字段

在序列化/反序列化时,我们可能需要忽略某些不必要的字段。以Jackson为例,可以通过 @JsonIgnore 注解来忽略字段。

public class User {
  private String name;
  @JsonIgnore
  private String password;
  // getters and setters
}

这将确保 password 字段不会出现在生成的JSON中。

5. 获取Json数据中某个字段

    // 获取params里面的documentId
    JsonNode jsonNode = new ObjectMapper().readTree(record.getParams());
    if (jsonNode.has("documentId")) {
        Integer documentId = jsonNode.get("documentId").asInt();
        record.setDocTypeId(documentId);
        if (clearLogDto.getDocTypeId() != null && !documentId.equals(clearLogDto.getDocTypeId())) {
            delete.add(record);
        }
    }

性能对比

在选择JSON库时,性能是一个重要的考虑因素。下表简要对比了Jackson、Gson、Fastjson三者的性能表现:

特性JacksonGsonFastjson
性能
易用性
功能丰富性
社区支持

参考:

JSON处理——FastJson、Jackson、Gson详细使用_gson fastjson-CSDN博客

到此这篇关于JSON数据操作与处理全面指南的文章就介绍到这了,更多相关JSON数据操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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