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

Java中JSONObject與JSONArray的使用示例小結(jié)

 更新時間:2025年04月30日 10:12:43   作者:風(fēng)的形狀  
JSONObject-lib包是一個beans,collections,maps,java arrays和xml和JSON互相轉(zhuǎn)換的包,本文給大家介紹Java中JSONObject與JSONArray的使用示例小結(jié),感興趣的朋友一起看看吧

JSONObject與JSONArray

最近在學(xué)習(xí)過程中用到了稍微復(fù)雜點的json數(shù)據(jù)需要將json數(shù)據(jù)解析出來,這里就截取一部分作為例子

1.JSONObject介紹

JSONObject-lib包是一個beans,collections,maps,java arrays和xml和JSON互相轉(zhuǎn)換的包。

2.下載jar包

https://files.cnblogs.com/java-pan/lib.rar

*或者在Maven的pom.xml文件中直接配置如下:

<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
</dependency>

 json數(shù)據(jù):

{
    "cartypes":[
        {"id":1,"imgUrl":"img/l.jpg","bigimg": "img/d.jpg","title":"別克威朗","marketprice":"15.29","periods":"12",
           "endrepayone":"96800","endrepaytwo":"96800","endrepaythree":"93000",
           "endmonthone":"3408","endmonthtwo":"3408","endmonththree":"3278",
           "repayfirst":"15290","repaytwo":"22935", "repaythree":"30580",
           "monthrepayone":"3578","monthrepaytwo":"2878","monthrepaythree":"2478",
           "cardetails": 
           [{ 
             "imageId00": "img/first-bkwl.jpg",
             "imageId01": "img/bkwl01.jpg",
             "imageId02": "img/bkwl02.jpg",
             "imageId03": "img/bkwl03.jpg",
             "imageId04": "img/bkwl04.jpg",
             "carname": "別克",
             "carmatter": "威朗",
             "carvolume":"1.5L",
             "sitnum":"5",
             "cargearbox":"6擋手自一體",
             "caremission":"國V",
             "carldone":"一體式座艙",
             "carldtwo":"絨面內(nèi)飾",
             "carldthree":"全景天窗",
             "carldfour":"展翼型HID大燈"
           }]
         },
         {"id":2,"imgUrl":"img/l.jpg","bigimg": "img/d.jpg","title":"英菲尼迪","marketprice":"18.98","periods":"12",
           "endrepayone":"126800","endrepaytwo":"126800","endrepaythree":"126800",
           "endmonthone":"4458","endmonthtwo":"4458","endmonththree":"4458",
           "repayfirst":"18980","repaytwo":"28470", "repaythree":"37960",
           "monthrepayone":"2738","monthrepaytwo":"1878","monthrepaythree":"998",
           "cardetails": 
            [{
             "imageId00": "img/first.jpg",
             "imageId01": "img/yfnd01.jpg",
             "imageId02": "img/yfnd02.jpg",
             "imageId03": "img/yfnd03.jpg",
             "imageId04": "img/yfnd04.jpg",
             "carname": "英菲尼迪",
             "carmatter": "ESQ",
             "carvolume":"1.6L",
             "sitnum":"5",
             "cargearbox":"CVT無級變速",
             "caremission":"國V",
             "carldone":"定制輪轂",
             "carldtwo":"多功能方向盤",
             "carldthree":"LED尾燈",
             "carldfour":"真皮座椅"
           }]
         }
    ]
}

當(dāng)接受到的是上面的json數(shù)據(jù)時,要獲取到里面的鍵對應(yīng)的值應(yīng)該怎樣做呢,比如要獲取title的值,獲取cardetails中的imageId02的值等。

面對這樣數(shù)組與對象相互嵌套的情況需要一步步將數(shù)據(jù)拆分,主要思想還是根據(jù)鍵取值,對于數(shù)組類型還是需要先根據(jù)”下標(biāo)”取出元素。這里還需要用到JSONObject與JSONArray。

將上面的json數(shù)據(jù)簡化就是:(這里保留個id便于識別)

{
    "cartypes":[
              {
                 "id":1,"bigimg": "img/dt-bkwl.jpg",
                 "cardetails": [{ "imageId02": "img/bkwl02.jpg}]
               }
               {
          "id":2,"bigimg": "img/xxx.jpg",
          "cardetails":[{"imageId002":"img/xx.jpg"}]
               }             
     ]
}

這就是簡化了的json數(shù)據(jù),可以看出這個串最外層是一個大的鍵為cartypes的對象,而它的值是json數(shù)組形式的比較復(fù)雜的json數(shù)據(jù)。繼續(xù)分析 [ ]的部分,可以看到,里面有兩個數(shù)組元素,每個元素分別是被{ }包起來的json對象,他們的元素組成相同,再看每個元素里面包含幾個鍵值對的數(shù)據(jù),其中鍵cardetails的值又是一個嵌套的json數(shù)組,里面包含一個json對象。分析完畢。那該怎樣才能(拿到數(shù)據(jù))解析呢?

 使用JSONObject與JSONArray

一般取數(shù)據(jù)有兩種方式,看需要選擇。

方式①:

通過 JSONObject.getString("鍵")直接獲取,這種方式只能每次獲取一個。

 方式②

通過構(gòu)建與json對象相應(yīng)的bean來獲取。

我在寫上面的例子時用到了兩種方式,由于需要使用到 id,bigimg以及cardetails中的大部分?jǐn)?shù)據(jù),因此我在使用時將cardetails封裝成一個bean,方便使用,而其他用到的比較少,因此就直接根據(jù)鍵獲取值。

另外需要注意的是,JSONObject,JSONArray分別對應(yīng)的是json數(shù)據(jù)的兩種格式。即{"張三" : "男"}  , [{ 張三" : " 男" }] ,使用時需要將其轉(zhuǎn)換成對應(yīng)的對象。

如(示例):

JSONObject jsonObject = JSONObject.fromObject(json);   //將json字符串轉(zhuǎn)換為JSONObject
JSONArray jsonArray = JSONArray.fromObject(json);  //將json字符串轉(zhuǎn)換為JSONArray

還有一點需要指出:在取鍵值是始終需要根據(jù)鍵取值,從外到內(nèi),取內(nèi)層的鍵的值需要先獲取外層鍵的值,如果跨越取值會報錯。

下面演示取值:

JSONObject jsonObject = JSONObject.fromObject(json);   //將json字符串轉(zhuǎn)化為JSONObject
String cartypes=jsonObject.getString("cartypes");      //通過getString("cartypes")取出里面的信息
JSONArray jsonArray = JSONArray.fromObject(cartypes);  //將取到的cartypes對應(yīng)的(一組)值字符串轉(zhuǎn)換為JSONArray
String id= job.getString("id");             //取id 
String bigImg = job.getString("bigimg");    //大圖
System.out.println("bigImg:"+bigImg);       //可以顯示已經(jīng)拿到bigimg的值

由于cardetails下的基本都是需要的值,一個一個取值比較麻煩,因此將cardetails封裝成一個bean  如下:

Cardetails.java

public class Cardetails {
    private String imageId00;
    private String imageId01;
    private String imageId02;
    private String imageId03;
    private String imageId04;
    private String carname;
    private String carmatter;
    private String carvolume;
    private int sitnum;
    private String cargearbox;
    private String  caremission;
    private String carldone;
    private String carldtwo;
    private String carldthree;
    private String carldfour;
    //get set 方法以及toString方法略
}

到這里,需要將cardetails中的鍵全轉(zhuǎn)成Cardetails中的屬性,方法如下:

//將cardetail封裝成bean
JSONArray carDetailArr=job.getJSONArray("cardetails");//將json字符串轉(zhuǎn)化為JSONArray
JSONObject carDetailObj = carDetailArr.getJSONObject(0);//獲取數(shù)組第一個元素
Cardetails cardetails = (Cardetails) JSONObject.toBean(carDetailObj, Cardetails.class);//封裝成bean
System.out.println("cardetails:"+cardetails); //能獲取到數(shù)據(jù)

最后附上部分代碼:

public void getICarDetail(int id){
        String json=null;
        try {
             json=iCarDetail.getICarDetail(id);//這里既是獲取上面json數(shù)據(jù)
        } catch (Exception e) {
            e.printStackTrace();
        }
        int jsonId=0;//json數(shù)組里的id值
        JSONObject jsonObject = JSONObject.fromObject(json);   //將json字符串轉(zhuǎn)化為JSONObject
        String cartypes=jsonObject.getString("cartypes");//通過getString("cartypes")取出里面的信息
        JSONArray jsonArray = JSONArray.fromObject(cartypes);  //將取到的cartypes對應(yīng)的(一組)值字符串轉(zhuǎn)換為JSONArray
        //遍歷jsonarray 數(shù)組
        if(jsonArray.size()>0){
            for(int i=0;i<jsonArray.size();i++){
                JSONObject job = jsonArray.getJSONObject(i);//把每一個對象轉(zhuǎn)成json對象
                jsonId=(int)job.get("id"); //得到每個對象中的id值
                if(jsonId==id){
                    //獲取相關(guān)值
                    String title = job.getString("title");            
                    String bigImg = job.getString("bigimg");          
                    String repayFirst = job.getString("repayfirst");  
                    String endrepayone = job.getString("endrepayone");
                    String endmonthone = job.getString("endmonthone");
                    String marketprice = job.getString("marketprice");
                    //將cardetail封裝成bean
                    JSONArray carDetailArr=job.getJSONArray("cardetails");//將json字符串轉(zhuǎn)化為JSONArray
                    JSONObject carDetailObj = carDetailArr.getJSONObject(0);//獲取數(shù)組第一個元素
                    Cardetails cardetails = (Cardetails) JSONObject.toBean(carDetailObj, Cardetails.class);//封裝成bean
                    //輸出顯示
                    System.out.println("******************");
                    System.out.println("jsonId:"+jsonId);
                    System.out.println("title:"+title);
                    System.out.println("bigImg:"+bigImg);
                    System.out.println("repayFirst:"+repayFirst);
                    System.out.println("endrepayone:"+endrepayone);
                    System.out.println("endmonthone:"+endmonthone);
                    System.out.println("marketprice:"+marketprice);
                    System.out.println("cardetails:"+cardetails);
}

相關(guān)文章

  • 在Spring?Boot使用Undertow服務(wù)的方法

    在Spring?Boot使用Undertow服務(wù)的方法

    Undertow是RedHAT紅帽公司開源的產(chǎn)品,采用JAVA開發(fā),是一款靈活,高性能的web服務(wù)器,提供了NIO的阻塞/非阻塞API,也是Wildfly的默認(rèn)Web容器,這篇文章給大家介紹了在Spring?Boot使用Undertow服務(wù)的方法,感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • java自動根據(jù)文件內(nèi)容的編碼來讀取避免亂碼

    java自動根據(jù)文件內(nèi)容的編碼來讀取避免亂碼

    這篇文章主要介紹了java自動根據(jù)文件內(nèi)容的編碼來讀取避免亂碼,需要的朋友可以參考下
    2014-02-02
  • springboot 集成redission 以及分布式鎖的使用詳解

    springboot 集成redission 以及分布式鎖的使用詳解

    這篇文章主要介紹了springboot 集成redission 以及分布式鎖的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java不可變類機制淺析

    Java不可變類機制淺析

    所謂的不可變類是指這個類的實例一旦創(chuàng)建完成后,就不能改變其成員變量值。如JDK內(nèi)部自帶的很多不可變類:Interger、Long和String等。接下來通過本文給大家介紹Java不可變類機制,需要的朋友參考下
    2017-02-02
  • Java 信息摘要加密MD2、MD4、MD5實現(xiàn)詳解

    Java 信息摘要加密MD2、MD4、MD5實現(xiàn)詳解

    這篇文章主要介紹了Java 信息摘要加密MD2、MD4、MD5實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Spring?Cloud集成Nacos?Config動態(tài)刷新源碼剖析

    Spring?Cloud集成Nacos?Config動態(tài)刷新源碼剖析

    這篇文章主要為大家介紹了Spring?Cloud集成Nacos?Config動態(tài)刷新源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 淺談springboot自動配置原理

    淺談springboot自動配置原理

    這篇文章主要介紹了淺談springboot自動配置原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java實現(xiàn)大文件分割與合并的實例代碼

    java實現(xiàn)大文件分割與合并的實例代碼

    java實現(xiàn)大文件分割與合并的實例代碼,需要的朋友可以參考一下
    2013-03-03
  • java SpringMVC學(xué)習(xí)使用詳解

    java SpringMVC學(xué)習(xí)使用詳解

    本篇文章主要介紹了java SpringMVC——如何獲取請求參數(shù)詳解,詳細(xì)的介紹了每種參數(shù)注解的用法及其實例。感興趣的小伙伴們可以參考一下
    2017-04-04
  • springmvc @RequestBody String類型參數(shù)的使用

    springmvc @RequestBody String類型參數(shù)的使用

    這篇文章主要介紹了springmvc @RequestBody String類型參數(shù)的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

平安县| 湖口县| 香河县| 武威市| 鞍山市| 定日县| 龙江县| 芦山县| 黎城县| 通榆县| 驻马店市| 五华县| 彩票| 察哈| 万年县| 新兴县| 绵竹市| 广元市| 沾化县| 都江堰市| 腾冲县| 湛江市| 英德市| 沙洋县| 穆棱市| 海原县| 石阡县| 丰镇市| 安多县| 连平县| 聂拉木县| 牙克石市| 绥德县| 东丽区| 安宁市| 出国| 沂水县| 洪雅县| 贵港市| 屯留县| 宜宾市|