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

Java解析使用JSON的多種方法

 更新時(shí)間:2022年12月23日 14:51:26   投稿:yin  
使用JSON作為數(shù)據(jù)傳輸,在瀏覽器端非常方便。JSON去除了所有JavaScript執(zhí)行代碼,只保留對(duì)象格式,而且JSON天生適合JavaScript處理,所以,絕大多數(shù)REST?API都選擇JSON作為數(shù)據(jù)傳輸格式?,F(xiàn)在問(wèn)題來(lái)了:使用Java如何對(duì)JSON進(jìn)行讀寫?

XML的特點(diǎn)是功能全面,但標(biāo)簽繁瑣,格式復(fù)雜。在Web上使用XML現(xiàn)在越來(lái)越少,取而代之的是JSON這種數(shù)據(jù)結(jié)構(gòu)。JSON是JavaScript Object Notation的縮寫,它去除了所有JavaScript執(zhí)行代碼,只保留JavaScript的對(duì)象格式。

開發(fā)Web應(yīng)用的時(shí)候,使用JSON作為數(shù)據(jù)傳輸,在瀏覽器端非常方便。因?yàn)镴SON天生適合JavaScript處理,所以,絕大多數(shù)REST API都選擇JSON作為數(shù)據(jù)傳輸格式?,F(xiàn)在問(wèn)題來(lái)了:使用Java如何對(duì)JSON進(jìn)行讀寫?

JSON優(yōu)缺點(diǎn)介紹

JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。 易于閱讀和編寫,同時(shí)也易于解析和生成,可以在多種語(yǔ)言之間進(jìn)行數(shù)據(jù)交換,并有效地提升網(wǎng)絡(luò)傳輸效率,同時(shí)也易于機(jī)器解析和生成。它是基于ECMAScript的一個(gè)子集。JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣。

優(yōu)點(diǎn):

1、數(shù)據(jù)格式比較簡(jiǎn)單,易于編程人員閱讀和編寫,同時(shí)也易于計(jì)算機(jī)生成和解析。

2、支持多種語(yǔ)言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等語(yǔ)言服務(wù)器端語(yǔ)言,便于服務(wù)器端的解析。

3、因?yàn)镴SON格式能夠直接被服務(wù)器端代碼使用,大大簡(jiǎn)化了服務(wù)器端和客戶端的代碼開發(fā)量,但是完成的任務(wù)不變,且易于維護(hù)。

缺點(diǎn):

1、語(yǔ)法嚴(yán)謹(jǐn),必須符合JSON語(yǔ)法規(guī)則。

2、要求字符集必須是Unicode,約束性強(qiáng)。

類庫(kù)選擇

在Java中,并沒有內(nèi)置JSON的解析,針對(duì)JSON也有標(biāo)準(zhǔn)的JSR 353 API,但是我們?cè)谇懊嬷vXML的時(shí)候發(fā)現(xiàn),如果能直接在XML和JavaBean之間互相轉(zhuǎn)換是最好的。類似的,如果能直接在JSON和JavaBean之間轉(zhuǎn)換,那么用起來(lái)就簡(jiǎn)單多了。

因此使用JSON需要借助第三方類庫(kù)。下面是幾個(gè)常用的 JSON 解析類庫(kù):

類型特點(diǎn)
傳統(tǒng)JSON方式復(fù)雜的Json數(shù)據(jù)轉(zhuǎn)換成實(shí)體類存在缺陷,性能和功能不夠完善
Jackson方式復(fù)雜的Json數(shù)據(jù)轉(zhuǎn)換成實(shí)體類存在缺陷,性能和功能優(yōu)于傳統(tǒng)方式
Gson方式功能方面在幾種方式中最優(yōu),性能方面不如Jackson方式
FastJson方式復(fù)雜的實(shí)體類轉(zhuǎn)換成Json數(shù)據(jù)存在缺陷,解析json的速度優(yōu)于其他方式

FastJson教程講解

環(huán)境配置

在 Maven 構(gòu)建的項(xiàng)目中,在 pom.xml 文件中加入以下依賴即可。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

編碼

從 Java 變量到 JSON 格式的編碼過(guò)程如下:

實(shí)例

public void testJson() {
    JSONObject object = new JSONObject();
    //string
    object.put("string","string");
    //int
    object.put("int",2);
    //boolean
    object.put("boolean",true);
    //array
    List<Integer> integers = Arrays.asList(1,2,3);
    object.put("list",integers);
    //null
    object.put("null",null);
?
    System.out.println(object);
}

在上例中,首先建立一個(gè) JSON 對(duì)象,然后依次添加字符串、整數(shù)、布爾值以及數(shù)組,最后將其打印為字符串。

輸出結(jié)果如下:

{"boolean":true,"string":"string","list":[1,2,3],"int":2}

解碼

從 JSON 對(duì)象到 Java 變量的解碼過(guò)程如下:

實(shí)例

public void testJson2() {
?
  JSONObject object = JSONObject
      .parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}");
  //string
  String s = object.getString("string");
  System.out.println(s);
  //int
  int i = object.getIntValue("int");
  System.out.println(i);
  //boolean
  boolean b = object.getBooleanValue("boolean");
  System.out.println(b);
  //list
  List<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class);
  integers.forEach(System.out::println);
  //null
  System.out.println(object.getString("null"));
?
}

在上例中,首先從 JSON 格式的字符串中構(gòu)造一個(gè) JSON 對(duì)象,之后依次讀取字符串、整數(shù)、布爾值以及數(shù)組,最后分別打印,打印結(jié)果如下:

string
2
true
1
2
3
null

JSON 對(duì)象與字符串的相互轉(zhuǎn)化

方法作用
JSON.parseObject()從字符串解析 JSON 對(duì)象
JSON.parseArray()從字符串解析 JSON 數(shù)組
JSON.toJSONString(obj/array)將 JSON 對(duì)象或 JSON 數(shù)組轉(zhuǎn)化為字符串

實(shí)例

//從字符串解析JSON對(duì)象
JSONObject obj = JSON.parseObject("{\"jb51\":\"腳本之家\"}");
//從字符串解析JSON數(shù)組
JSONArray arr = JSON.parseArray("[\"腳本之家\",\"JB51\"]\n");
//將JSON對(duì)象轉(zhuǎn)化為字符串
String objStr = JSON.toJSONString(obj);
//將JSON數(shù)組轉(zhuǎn)化為字符串
String arrStr = JSON.toJSONString(arr);

到此這篇關(guān)于Java解析使用JSON的多種方法的文章就介紹到這了,更多相關(guān)Java解析JSON內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring?boot微服務(wù)場(chǎng)景下apollo加載過(guò)程解析

    spring?boot微服務(wù)場(chǎng)景下apollo加載過(guò)程解析

    apollo?是一個(gè)開源的配置中心項(xiàng)目,功能很強(qiáng)大,apollo?本身的配置項(xiàng)并不復(fù)雜,但是因?yàn)榕渲玫穆窂教貏e多,非常容易搞混了,?所以本文試圖聚焦?spring-boot?的場(chǎng)景,在?spring-boot?微服務(wù)場(chǎng)景下,搞清楚?apollo-client的加載過(guò)程
    2022-02-02
  • maven項(xiàng)目下solr和spring的整合配置詳解

    maven項(xiàng)目下solr和spring的整合配置詳解

    這篇文章主要介紹了maven項(xiàng)目下solr和spring的整合配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • SpringBoot Application事件監(jiān)聽的實(shí)現(xiàn)方案

    SpringBoot Application事件監(jiān)聽的實(shí)現(xiàn)方案

    這篇文章主要介紹了SpringBoot Application事件監(jiān)聽的實(shí)現(xiàn)方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用@Validated注解進(jìn)行校驗(yàn)卻沒有效果的解決

    使用@Validated注解進(jìn)行校驗(yàn)卻沒有效果的解決

    這篇文章主要介紹了使用@Validated注解進(jìn)行校驗(yàn)卻沒有效果的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Mybatis動(dòng)態(tài)拼接sql提高插入速度實(shí)例

    Mybatis動(dòng)態(tài)拼接sql提高插入速度實(shí)例

    這篇文章主要介紹了Mybatis動(dòng)態(tài)拼接sql提高插入速度實(shí)例,當(dāng)數(shù)據(jù)量少的時(shí)候,沒問(wèn)題,有效時(shí)間內(nèi)可能完成插入,但是當(dāng)數(shù)據(jù)量達(dá)到一定程度的時(shí)候,每次都一個(gè)sql插入超時(shí),所以采用了拼接sql的方式加快速度,需要的朋友可以參考下
    2023-09-09
  • Spring MVC入門_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Spring MVC入門_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Spring MVC入門,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Java讀取String分行字符串的方法

    Java讀取String分行字符串的方法

    今天小編就為大家分享一篇Java讀取String分行字符串的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java實(shí)現(xiàn)獲取控制臺(tái)輸出結(jié)果轉(zhuǎn)換為變量的詳細(xì)操作

    Java實(shí)現(xiàn)獲取控制臺(tái)輸出結(jié)果轉(zhuǎn)換為變量的詳細(xì)操作

    在Java編程中,有時(shí)需將控制臺(tái)的輸出捕獲為字符串,以便于后續(xù)的處理或測(cè)試,這種需求在日志記錄、單元測(cè)試或調(diào)試時(shí)尤為常見,下面,將通過(guò)詳細(xì)步驟來(lái)介紹如何使用ByteArrayOutputStream和PrintStream來(lái)實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2024-06-06
  • Java 包和訪問(wèn)權(quán)限操作

    Java 包和訪問(wèn)權(quán)限操作

    這篇文章主要介紹了Java 包和訪問(wèn)權(quán)限操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • java 遞歸深入理解

    java 遞歸深入理解

    一個(gè)過(guò)程或函數(shù)在其定義或說(shuō)明中有直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問(wèn)題層層轉(zhuǎn)化為一個(gè)與原問(wèn)題相似的規(guī)模較小的問(wèn)題來(lái)求解,需要的朋友可以參考下
    2012-11-11

最新評(píng)論