欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、JSON的基本概念

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

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

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

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

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

二、JSON處理常見庫

1. Jackson

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

對象轉(zhuǎn)JSON

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

JSON轉(zhuǎn)對象

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

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

2. Gson

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

對象轉(zhuǎn)JSON

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

JSON轉(zhuǎn)對象

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

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

3. Fastjson

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

對象轉(zhuǎn)JSON

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

JSON轉(zhuǎn)對象

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

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

三、JSON的常見操作

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

通常我們處理的JSON不僅僅是簡單的對象,還可能是嵌套的對象或數(shù)組。以Jackson為例,我們可以使用 TypeReference 來處理復(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ā)中,有時我們希望將JSON數(shù)據(jù)轉(zhuǎn)為 Map<String, Object>,以便于動態(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. 處理日期和時間格式

JSON默認(rèn)不支持日期格式,因此在處理日期類型的字段時需要特別處理。以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 字段不會出現(xiàn)在生成的JSON中。

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

    // 獲取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三者的性能表現(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot登錄驗(yàn)證的統(tǒng)一攔截處理的實(shí)現(xiàn)

    Springboot登錄驗(yàn)證的統(tǒng)一攔截處理的實(shí)現(xiàn)

    如果不進(jìn)行統(tǒng)一的攔截處理,每次用戶請求你都要去進(jìn)行用戶的信息驗(yàn)證,所以本文主要介紹了Springboot登錄驗(yàn)證的統(tǒng)一攔截處理的實(shí)現(xiàn),感興趣的可以了解一下,感興趣的可以了解一下
    2023-09-09
  • Spring?AOP概念及原理解析

    Spring?AOP概念及原理解析

    這篇文章主要介紹了Spring?AOP概念及原理?,通過使用?Spring?AOP?實(shí)現(xiàn)日志管理,我們可以將日志記錄的邏輯從業(yè)務(wù)邏輯中分離出來,簡化了代碼的維護(hù),需要的朋友可以參考下
    2024-07-07
  • java基于poi導(dǎo)出excel透視表代碼實(shí)例

    java基于poi導(dǎo)出excel透視表代碼實(shí)例

    這篇文章主要介紹了java基于poi導(dǎo)出excel透視表代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • springboot?ElasticSearch如何配置自定義轉(zhuǎn)換器ElasticsearchCustomConversions

    springboot?ElasticSearch如何配置自定義轉(zhuǎn)換器ElasticsearchCustomConver

    這篇文章主要介紹了springboot?ElasticSearch如何配置自定義轉(zhuǎn)換器ElasticsearchCustomConversions問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • springboot返回時間戳問題

    springboot返回時間戳問題

    在SpringBoot中配置時間格式,可以通過配置類或配置文件實(shí)現(xiàn),若需處理日期,可直接在配置文件中設(shè)置,存儲時間戳毫秒值時,建立數(shù)據(jù)庫字段精度為3,確保時間精確,這些個人經(jīng)驗(yàn)供參考
    2024-09-09
  • Spring Boot 2.5.0 重新設(shè)計(jì)的spring.sql.init 配置有啥用

    Spring Boot 2.5.0 重新設(shè)計(jì)的spring.sql.init 配置有啥用

    前幾天Spring Boot 2.5.0發(fā)布了,其中提到了關(guān)于Datasource初始化機(jī)制的調(diào)整,有讀者私信想了解這方面做了什么調(diào)整。那么今天就要詳細(xì)說說這個重新設(shè)計(jì)的配置內(nèi)容,并結(jié)合實(shí)際情況說說我的理解和實(shí)踐建議
    2021-05-05
  • SpringBoot解決406錯誤之返回對象缺少Getter/Setter方法引發(fā)的問題

    SpringBoot解決406錯誤之返回對象缺少Getter/Setter方法引發(fā)的問題

    在Spring Boot開發(fā)中,接口請求返回?cái)?shù)據(jù)是系統(tǒng)交互的重要環(huán)節(jié),然而,開發(fā)過程中常常會遇到由于數(shù)據(jù)類型或返回格式問題導(dǎo)致的錯誤,其中最常見的就是406 Not Acceptable異常,本篇文章以實(shí)際的案例出發(fā),詳細(xì)分析在POST請求中產(chǎn)生406錯誤的原因
    2024-11-11
  • spring boot發(fā)簡單文本郵件案例

    spring boot發(fā)簡單文本郵件案例

    這篇文章主要介紹了spring boot發(fā)簡單文本郵件案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringMVC中RequestMapping注解(作用、出現(xiàn)的位置、屬性)

    SpringMVC中RequestMapping注解(作用、出現(xiàn)的位置、屬性)

    這篇文章主要介紹了SpringMVC中RequestMapping注解(作用、出現(xiàn)的位置、屬性),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java顯示程序包不存在的三種解決方法總結(jié)

    Java顯示程序包不存在的三種解決方法總結(jié)

    在Java開發(fā)中,有時會遇到“程序包javax.servlet不存在”等錯誤提示,這通常是因?yàn)槿鄙俦匾膸旎蛞蕾図?xiàng),這篇文章主要給大家介紹了關(guān)于Java顯示程序包不存在的三種解決方法,需要的朋友可以參考下
    2024-07-07

最新評論