最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中JSON數(shù)據(jù)操作與處理全面指南

 更新時(shí)間:2024年10月08日 09:59:40   作者:總是學(xué)不會(huì).  
JSON(JavaScript Object Notation)是數(shù)據(jù)交換的輕量級(jí)格式,它以易于人類閱讀和機(jī)器解析的方式組織數(shù)據(jù),基于鍵值對(duì),在Java開發(fā)中,處理JSON數(shù)據(jù)通常涉及使用Jackson、Gson、Fastjson等庫(kù),本文給大家介紹JSON數(shù)據(jù)操作與處理全面指南,感興趣的朋友一起看看吧

JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,廣泛應(yīng)用于前后端的數(shù)據(jù)傳遞和API通信中。它基于鍵值對(duì)的方式組織數(shù)據(jù),便于人類閱讀和機(jī)器解析。在Java開發(fā)中,處理JSON數(shù)據(jù)通常需要使用一些常見的庫(kù),如Jackson、Gson、Fastjson等。本篇將介紹JSON的基本概念、常用操作及在Java中的具體應(yīng)用。

一、JSON的基本概念

JSON的數(shù)據(jù)結(jié)構(gòu)包括兩種:對(duì)象數(shù)組。

對(duì)象:使用 {} 括起來(lái),內(nèi)部是鍵值對(duì)的集合,每個(gè)鍵和值之間用冒號(hào) : 分隔,多個(gè)鍵值對(duì)之間用逗號(hào) , 分隔。例如:

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

數(shù)組:使用 [] 括起來(lái),內(nèi)部是多個(gè)值,每個(gè)值之間用逗號(hào)分隔。例如:

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

二、JSON處理常見庫(kù)

1. Jackson

Jackson 是Java中處理JSON最常用的庫(kù)之一,它能夠輕松地將Java對(duì)象與JSON字符串互相轉(zhuǎn)換,具備高效、靈活、功能強(qiáng)大的特點(diǎn)。

對(duì)象轉(zhuǎn)JSON

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

JSON轉(zhuǎn)對(duì)象

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

Jackson還支持復(fù)雜類型的解析、忽略字段、日期格式化等高級(jí)功能。

2. Gson

Gson 是由Google提供的另一款流行的JSON處理庫(kù)。它以輕量、易用著稱,適合處理簡(jiǎn)單的JSON數(shù)據(jù)結(jié)構(gòu)。

對(duì)象轉(zhuǎn)JSON

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

JSON轉(zhuǎn)對(duì)象

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

Gson的API風(fēng)格簡(jiǎn)單明了,但在性能上可能略遜于Jackson。

3. Fastjson

Fastjson 是阿里巴巴開源的高性能JSON庫(kù),特別在解析大量JSON數(shù)據(jù)時(shí)表現(xiàn)出色。

對(duì)象轉(zhuǎn)JSON

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

JSON轉(zhuǎn)對(duì)象

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

Fastjson支持豐富的序列化/反序列化選項(xiàng),還能夠處理JSONPath等高級(jí)功能。

三、JSON的常見操作

1. 解析復(fù)雜的JSON結(jié)構(gòu)

通常我們處理的JSON不僅僅是簡(jiǎn)單的對(duì)象,還可能是嵌套的對(duì)象或數(shù)組。以Jackson為例,我們可以使用 TypeReference 來(lái)處理復(fù)雜的嵌套類型。

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互轉(zhuǎn)

在實(shí)際開發(fā)中,有時(shí)我們希望將JSON數(shù)據(jù)轉(zhuǎn)為 Map<String, Object>,以便于動(dòng)態(tài)操作數(shù)據(jù)。

JSON轉(zhuǎn)Map

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

Map轉(zhuǎn)JSON

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

3. 處理日期和時(shí)間格式

JSON默認(rèn)不支持日期格式,因此在處理日期類型的字段時(shí)需要特別處理。以Jackson為例,可以通過 @JsonFormat 注解指定日期格式。

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

反序列化時(shí),也可以全局配置 ObjectMapper 以處理日期格式:

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

4. 忽略字段

在序列化/反序列化時(shí),我們可能需要忽略某些不必要的字段。以Jackson為例,可以通過 @JsonIgnore 注解來(lái)忽略字段。

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

這將確保 password 字段不會(huì)出現(xiàn)在生成的JSON中。

5. 獲取Json數(shù)據(jù)中某個(gè)字段

    // 獲取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);
        }
    }

性能對(duì)比

在選擇JSON庫(kù)時(shí),性能是一個(gè)重要的考慮因素。下表簡(jiǎn)要對(duì)比了Jackson、Gson、Fastjson三者的性能表現(xiàn):

特性JacksonGsonFastjson
性能
易用性
功能豐富性
社區(qū)支持強(qiáng)強(qiáng)強(qiáng)

參考:

JSON處理——FastJson、Jackson、Gson詳細(xì)使用_gson fastjson-CSDN博客

到此這篇關(guān)于JSON數(shù)據(jù)操作與處理全面指南的文章就介紹到這了,更多相關(guān)JSON數(shù)據(jù)操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用mvn?deploy命令上傳jar包的實(shí)現(xiàn)

    使用mvn?deploy命令上傳jar包的實(shí)現(xiàn)

    本文介紹了使用mvndeploy:deploy-file命令將本地倉(cāng)庫(kù)中的JAR包重新發(fā)布到Maven私服,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 淺談Java中static關(guān)鍵字的作用

    淺談Java中static關(guān)鍵字的作用

    這篇文章主要介紹了Java中static關(guān)鍵字的作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 淺談關(guān)于Java中TimeZone鎖競(jìng)爭(zhēng)引發(fā)的問題解決

    淺談關(guān)于Java中TimeZone鎖競(jìng)爭(zhēng)引發(fā)的問題解決

    本文主要介紹了淺談關(guān)于Java中TimeZone鎖競(jìng)爭(zhēng)引發(fā)的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • RabbitMQ在微服務(wù)架構(gòu)中的落地:消息推送?/?解耦?/?削峰填谷

    RabbitMQ在微服務(wù)架構(gòu)中的落地:消息推送?/?解耦?/?削峰填谷

    本文介紹了RabbitMQ在微服務(wù)架構(gòu)中的三大應(yīng)用場(chǎng)景:消息推送、服務(wù)解耦和削峰填谷,通過實(shí)際代碼示例展示了如何在實(shí)際項(xiàng)目中應(yīng)用RabbitMQ實(shí)現(xiàn)這些模式,感興趣的朋友一起看看吧
    2026-05-05
  • 淺談Java線程并發(fā)知識(shí)點(diǎn)

    淺談Java線程并發(fā)知識(shí)點(diǎn)

    本文主要對(duì)Java線程并發(fā)的知識(shí)點(diǎn)進(jìn)行簡(jiǎn)單介紹。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • Java必備知識(shí)之位運(yùn)算及常見進(jìn)制解讀

    Java必備知識(shí)之位運(yùn)算及常見進(jìn)制解讀

    從現(xiàn)代計(jì)算機(jī)中所有的數(shù)據(jù)二進(jìn)制的形式存儲(chǔ)在設(shè)備中。即 0、1 兩種狀態(tài),計(jì)算機(jī)對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行的運(yùn)算(+、-、*、/)都是叫位運(yùn)算,即將符號(hào)位共同參與運(yùn)算的運(yùn)算
    2021-10-10
  • Java干貨知識(shí)深入理解內(nèi)部類

    Java干貨知識(shí)深入理解內(nèi)部類

    這篇文章主要介紹了Java干貨知識(shí)深入理解內(nèi)部類,定義在另一個(gè)類或方法中的類就叫做內(nèi)部類,需要的朋友可以參考下
    2019-06-06
  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新原理解析

    這篇文章主要介紹了SpringCloud之配置刷新的原理,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • Java 通過API操作GraphQL

    Java 通過API操作GraphQL

    這篇文章主要介紹了Java 通過API操作GraphQL的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-05-05
  • 跨域解決方案Jsonp原理解析

    跨域解決方案Jsonp原理解析

    這篇文章主要介紹了跨域解決方案Jsonp原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

通渭县| 海阳市| 台中市| 阿瓦提县| 深州市| 郴州市| 潮安县| 新泰市| 商洛市| 基隆市| 玉田县| 锦州市| 太白县| 西畴县| 鲜城| 分宜县| 长宁县| 容城县| 奇台县| 新乡市| 濉溪县| 仁化县| 江陵县| 漳州市| 怀远县| 滁州市| 临漳县| 富蕴县| 蕉岭县| 海伦市| 游戏| 阳东县| 茂名市| 新巴尔虎左旗| 洪泽县| 米脂县| 黑水县| 鄂伦春自治旗| 静乐县| 增城市| 林周县|