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

使用Jackson-json解析一個嵌套的json字符串

 更新時間:2021年09月17日 14:39:58   作者:丶老邱  
這篇文章主要介紹了使用Jackson-json解析一個嵌套的json字符串,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Jackson-json解析一個嵌套的json字符串

最近想嘗試一下java的爬蟲的編寫,于是不可避免的遇到了要處理json數(shù)據(jù)的問題,于是乎用到了Jackson-json這個jar包

關(guān)于這個jar包

先在工程中導(dǎo)入這個jar包,然后創(chuàng)建一個ObjectMapper對象

ObjectMapper objectmapper=new ObjectMapper;

然后讀入我的json字符串(str)

得到JsonNode對象

JsonNode node=mapper.readTree(str);

之后就是處理這個JsonNode對象了

但是我的json字符串長這樣

把節(jié)點展開

但其實我只要shops屬性下的json,所以這里相當于json對象的嵌套

所以我讀進來的這個node其實就只有一個Json,我得一步一步往下取,當我取到shops時就會出現(xiàn)40個Json

JsonNode lastnode=node.get("result").get("1584548").get("result").get(0).get("shops");

要注意的一點是

//必須確保node是一個json數(shù)組,不能像頂層那樣只是一個json,不然直接用索引取會得到null,而且下標從零開始

取到shops時就簡單了,貼上代碼

JsonNode newnode=null;
		List<Shop> shoplist=new ArrayList<>();
		for(int i=0;i<lastnode.size();i++) {
			newnode=lastnode.get(i);
			Shop shop=new Shop();
			shop.setWord(newnode.get("item_title").asText());
			shop.setImg(newnode.get("item_pic").asText());
			shop.setPrice(newnode.get("item_current_price").asLong());
			shoplist.add(shop);						
		}
		for(int j=0;j<shoplist.size();j++) {
			System.out.println(shoplist.get(j));
		}

最后的結(jié)果

java解析多層嵌套json字符串

java分別解析下面兩個json字符串

package jansonDemo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class TestJSON {
    /**
     * JSON實際上也是鍵值對("key":"value")
     * key 必須是字符串,value 可以是合法的 JSON 數(shù)據(jù)類型(字符串, 數(shù)字, 對象, 數(shù)組, 布爾值或 null)
     * value如果是字符串,用jsonobj.getString("key")獲取
     * value如果是數(shù)  字,用jsonobj.getIntValue("key"),jsonobj.getFloatValue("key"),jsonobj.getInteger("key")等基本數(shù)據(jù)類型及其包裝類的方法獲取
     * value如果是布爾值,用jsonobj.getBoolean("key"),jsonobj.getBooleanValue("key")獲取
     * value如果是數(shù)  組,用jsonobj.getJSONArray("key")獲取
     * value如果是Object對象,用jsonobj.get("key"),獲取
     * value如果是JSONObject對象,用jsonobj.getJSONObject("key")獲取
     */
    /**
     * 該方法用于將已有的json字符串轉(zhuǎn)換為json對象,并取出該對象中相應(yīng)的key對應(yīng)的value值
     * 將已有的字符串轉(zhuǎn)換成jsonobject,用JSON.parseObject(jsonStr)方法
     * json中只要是{}就代表一個JSONObject,[]就代表一個JSONArray
     * 獲取JSONObject對象用JSONObject jsonobject.getJSONObject("key")方法
     * 獲取JSONArray對象用JSONObject jsonobject.getJSONArray("key")方法
     */
    private static void strWritedToJSONObject() {
        //以下是一個json對象中嵌套一個json子對象
        String myJsonObj = "{\n" +
                "    \"name\":\"runoob\",\n" +
                "    \"alexa\":10000,\n" +
                "    \"sites\": {\n" +
                "        \"site1\":\"www.runoob.com\",\n" +
                "        \"site2\":\"m.runoob.com\",\n" +
                "        \"site3\":\"c.runoob.com\"\n" +
                "    }\n" +
                "}";
        JSONObject jsonobj = JSON.parseObject(myJsonObj); //將json字符串轉(zhuǎn)換成jsonObject對象
        /***獲取JSONObject中每個key對應(yīng)的value值時,可以根據(jù)實際場景中想得到什么類型就分別運用不到的方法***/
        System.out.println(jsonobj.get("name")); //取出name對應(yīng)的value值,得到的是一個object
        System.out.println(jsonobj.getString("name")); //取出name對應(yīng)的value值,得到的是一個String
        System.out.println(jsonobj.getIntValue("alexa")); //取出name對應(yīng)的value值,得到的是一個int
        System.out.println(jsonobj.get("sites")); //取出sites對應(yīng)的value值,得到的是一個object
        System.out.println(jsonobj.getString("sites"));
        System.out.println(jsonobj.getJSONObject("sites")); //取出sites對應(yīng)的value值,得到一個JSONObject子對象
        System.out.println(jsonobj.getJSONObject("sites").getString("site2")); //取出嵌套的JSONObject子對象中site2對應(yīng)的value值,必須用getJSONObject()先獲取JSONObject
        /**
         * 以下是一個json對象中包含數(shù)組,數(shù)組中又包含json子對象和子數(shù)組
         */
        String myJsonObj2 = "{\n" +
                "    \"name\":\"網(wǎng)站\",\n" +
                "    \"num\":3,\n" +
                "    \"sites\": [\n" +
                "        { \"name\":\"Google\", \"info\":[ \"Android\", \"Google 搜索\", \"Google 翻譯\" ] },\n" +
                "        { \"name\":\"Runoob\", \"info\":[ \"菜鳥教程\", \"菜鳥工具\", \"菜鳥微信\" ] },\n" +
                "        { \"name\":\"Taobao\", \"info\":[ \"淘寶\", \"網(wǎng)購\" ] }\n" +
                "    ]\n" +
                "}";
        JSONObject jsonobj2 = JSON.parseObject(myJsonObj2); //將json字符串轉(zhuǎn)換成jsonObject對象
        System.out.println(jsonobj2.get("sites"));
        System.out.println(jsonobj2.getString("sites"));
        System.out.println(jsonobj2.getJSONArray("sites")); //取出sites對應(yīng)的value值,得到一個JSONOArray對象
        //System.out.println(jsonobj2.getJSONObject("sites")); 不能用該方法,因為sites是一個JSONOArray對象
        //取出json對象中sites對應(yīng)數(shù)組中第一個json子對象的值
        System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0)); //得到結(jié)果:{"name":"Google","info":["Android","Google 搜索","Google 翻譯"]}
        System.out.println(jsonobj2.getJSONArray("sites").get(0));
        System.out.println(jsonobj2.getJSONArray("sites").getString(0));
        //取出json對象中sites對應(yīng)數(shù)組中第一個json子對象下面info對應(yīng)的嵌套子數(shù)組值
        System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info")); //得到結(jié)果:["Android","Google 搜索","Google 翻譯"]
        //取出json對象中sites對應(yīng)數(shù)組中第一個json子對象下面info對應(yīng)的嵌套子數(shù)組中第二個值
        System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info").getString(1)); //得到結(jié)果:Google 搜索
        //依次取出json對象中sites對應(yīng)數(shù)組中的值
        JSONArray array = jsonobj2.getJSONArray("sites");
        getJsonArrayItem(array);
        //依次取出json對象中sites對應(yīng)數(shù)組中第二個json子對象下面info對應(yīng)的嵌套子數(shù)組值
        JSONArray arr = jsonobj2.getJSONArray("sites").getJSONObject(1).getJSONArray("info");
        getJsonArrayItem(arr);
     }
    /**
     * 手動添加對象到一個JSONObject
     */
    private static void writeStrToJSONObject() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","tom");
        jsonObject.put("age",20);
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonArrayObject1 = new JSONObject();
        jsonArrayObject1.put("name","alibaba");
        jsonArrayObject1.put("info","www.alibaba.com");
        JSONObject jsonArrayObject2 = new JSONObject();
        jsonArrayObject2.put("name","baidu");
        jsonArrayObject2.put("info","www.baidu.com");
        jsonArray.add(jsonArrayObject1);
        jsonArray.add(jsonArrayObject2);
        jsonObject.put("sites",jsonArray);
        System.out.println(jsonObject);
     }
    /**
     * 將字符串轉(zhuǎn)為JSONArray
     */
    private static void strToJsonArray() {
        String arrayStr = "[\n" +
                "        {\n" +
                "            \"name\":\"alibaba\",\n" +
                "            \"info\":\"www.alibaba.com\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\":\"baidu\",\n" +
                "            \"info\":\"www.baidu.com\"\n" +
                "        }\n" +
                "    ]";
        JSONArray array = JSON.parseArray(arrayStr);
        System.out.println(array);
     }
    /**
     * 依次取出JSONArray中的值
     */
    private static void getJsonArrayItem(JSONArray array) {
        for (int i=0; i<array.size(); i++) {
            System.out.println(array.get(i));
        }
    }
     //測試類
    public static void main(String[] args) {
        strWritedToJSONObject();
        //writeStrToJSONObject();
        //strToJsonArray();
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring security BCryptPasswordEncoder密碼驗證原理詳解

    Spring security BCryptPasswordEncoder密碼驗證原理詳解

    這篇文章主要介紹了Spring security BCryptPasswordEncoder密碼驗證原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java微信小程序醫(yī)院掛號系統(tǒng)

    Java微信小程序醫(yī)院掛號系統(tǒng)

    這篇文章主要介紹了基于Java微信小程序醫(yī)院掛號系統(tǒng),可以實現(xiàn)遠程處理事務(wù),遠程提交工作和隨時追蹤工作的狀態(tài),文中提供了解決思路和部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-03-03
  • Java中LambdaQueryWrapper的常用方法詳解

    Java中LambdaQueryWrapper的常用方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中LambdaQueryWrapper常用方法的相關(guān)資料,lambdaquerywrapper是一個Java庫,用于構(gòu)建類型安全的Lambda表達式查詢,需要的朋友可以參考下
    2023-11-11
  • Java 程序員必備的 Intellij IDEA 插件

    Java 程序員必備的 Intellij IDEA 插件

    java插件十分方便實用,以下是我用過不錯的Intellij插件,當然還有很多插件也都不錯,下面將我覺得不錯的插件分享給大家,希望能幫到大家
    2018-09-09
  • Java中常見的XML解析方法與應(yīng)用詳解

    Java中常見的XML解析方法與應(yīng)用詳解

    XML(eXtensible Markup Language)是一種用于存儲和傳輸數(shù)據(jù)的標記語言,被廣泛應(yīng)用于表示和交換獨立于應(yīng)用程序和硬件平臺的結(jié)構(gòu)化信息,下面我們就來看看它的常見解析方法有哪些吧
    2024-01-01
  • Java中的攔截器、過濾器、監(jiān)聽器用法詳解

    Java中的攔截器、過濾器、監(jiān)聽器用法詳解

    這篇文章主要介紹了Java中的攔截器、過濾器、監(jiān)聽器用法,詳細分析了Java攔截器、過濾器、監(jiān)聽器的功能、使用方法及相關(guān)注意事項,需要的朋友可以參考下
    2017-05-05
  • java中帶參數(shù)的try(){}語法含義詳解

    java中帶參數(shù)的try(){}語法含義詳解

    這篇文章主要介紹了java中帶參數(shù)的try(){}語法含義詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java基礎(chǔ)知識之注解、元注解

    Java基礎(chǔ)知識之注解、元注解

    ava 注解,從名字上看是注釋,解釋。但功能卻不僅僅是注釋那么簡單,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)知識之注解、元注解的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • SpringBoot使用flyway初始化數(shù)據(jù)庫

    SpringBoot使用flyway初始化數(shù)據(jù)庫

    這篇文章主要介紹了SpringBoot如何使用flyway初始化數(shù)據(jù)庫,幫助大家更好的理解和學習使用SpringBoot框架,感興趣的朋友可以了解下
    2021-03-03
  • IntelliJ IDEA設(shè)置Tabs實現(xiàn)同時打開多個文件且分行顯示

    IntelliJ IDEA設(shè)置Tabs實現(xiàn)同時打開多個文件且分行顯示

    今天小編就為大家分享一篇關(guān)于IntelliJ IDEA設(shè)置Tabs實現(xiàn)同時打開多個文件且分行顯示,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評論

宜黄县| 东乡县| 德兴市| 册亨县| 板桥市| 嘉善县| 玉屏| 井陉县| 岳阳县| 革吉县| 南城县| 锦州市| 华蓥市| 松潘县| 乌拉特前旗| 靖边县| 广德县| 应城市| 汾阳市| 凤阳县| 晋城| 乐至县| 招远市| 宜城市| 林州市| 顺平县| 海阳市| 武胜县| 祁连县| 微博| 奇台县| 乳山市| 东辽县| 陕西省| 青阳县| 海安县| 连平县| 宿迁市| 澎湖县| 涿鹿县| 历史|