1. 程式人生 > >3、解析複雜Json進階

3、解析複雜Json進階

場景一

沒有頭的Json陣列
“e:/person”檔案內容如下,檔案中是沒有頭的json陣列

[
    {
        "id" : 1,
        "name" : "lzj",
        "age" : 27
    },
    {
        "id" : 2,
        "name" : "Bob",
        "age" : 20
    },
    {
        "id" : 3,
        "name" : "Terry",
        "age" : 26
    }
]
    /*也可用JsonReader來實現*/
@Test public void test1() throws FileNotFoundException{ GsonBuilder builder = new GsonBuilder(); Gson gson = builder.create(); FileReader fileReader = new FileReader("e:/person"); JsonParser parser = new JsonParser(); JsonElement jsonElement = parser.parse(fileReader); JsonArray asJsonArray = jsonElement.getAsJsonArray(); List<Person> persons = new
ArrayList<Person>(); /*JsonArray繼承自JsonElement,JsonArray是JsonElement陣列形式*/ for(JsonElement elment : asJsonArray){ Person person = gson.fromJson(elment, Person.class); persons.add(person); } System.out.println(persons); }

執行程式,輸出如下:

[Person [id=1
, name=lzj, age=27], Person [id=2, name=Bob, age=20], Person [id=3, name=Terry, age=26]]

場景二

有頭的Json陣列
“e:/person1”檔案中json字串內容如下:

{
    "persons" :[
        {
            "id" : 1,
            "name" : "lzj",
            "age" : 27
        },
        {
            "id" : 2,
            "name" : "Bob",
            "age" : 20
        },
        {
            "id" : 3,
            "name" : "Terry",
            "age" : 26
        }
    ]

}
    @Test
    public void test2() throws FileNotFoundException{
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        FileReader fileReader = new FileReader("e:/person1");
        JsonParser parser = new JsonParser();
        JsonElement jsonElement = parser.parse(fileReader);
        JsonObject jsonObject = jsonElement.getAsJsonObject();
        JsonArray jsonArray = jsonObject.getAsJsonArray("persons");
        List<Person> persons = new ArrayList<Person>();
        for(JsonElement elment : jsonArray){
            Person person = gson.fromJson(elment, Person.class);
            persons.add(person);
        }
        System.out.println(persons);
    }

執行程式,輸出如下

[Person [id=1, name=lzj, age=27], Person [id=2, name=Bob, age=20], Person [id=3, name=Terry, age=26]]

場景三

Json陣列外含有其他Json字串
“e:/person2”檔案中字串如下

{
    "code" : 200,
    "persons" :[
        {
            "id" : 1,
            "name" : "lzj",
            "age" : 27
        },
        {
            "id" : 2,
            "name" : "Bob",
            "age" : 20
        },
        {
            "id" : 3,
            "name" : "Terry",
            "age" : 26
        }
    ]

}
    @Test
    public void test3() throws FileNotFoundException{
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        FileReader fileReader = new FileReader("e:/person2");
        Persons persons = gson.fromJson(fileReader, Persons.class);
        System.out.println(persons.getPersons());
    }

執行程式,輸出內容如下:

[Person [id=1, name=lzj, age=27], Person [id=2, name=Bob, age=20], Person [id=3, name=Terry, age=26]]

也可以用上一示例的方法進行解決,只是去獲取“persons”中的內容就可以了。場景二中的程式碼只需要把讀取的檔案修改為“e:/person2”,拿過來可以直接使用。

附:

public class Person {
    private int id;
    private String name;
    private int age;
    /*省略set/get/toString方法*/
}
public class Persons {
    private String code;
    private List<Person> persons;
    /*省略set/get/toString方法*/
}

相關推薦

3解析複雜Json

場景一 沒有頭的Json陣列 “e:/person”檔案內容如下,檔案中是沒有頭的json陣列 [ { "id" : 1, "name" : "lzj", "age" : 27 },

Python開發基礎----反射面向對象

elf bob 是否 pro sat 自己的 代碼 改變 數據類型 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)檢查是否obj是否是類 cls 的對象,如果是返回True 1 class Foo

Ubuntu分區方案(菜鳥方案常用方案和方案)

變化 格式化 執行 菜鳥 格式 分開 清理 知識庫 重新 菜鳥方案 “/”與swap兩個分區就可以應付絕大多數的應用 常用方案 分為3個區 1. 掛載點/;主分區;安裝系統和軟件;大小為30G;分區格式為ext4; 2. 掛載點/home;邏輯分區;相當於“我的文檔”;大小

5.1.3 網絡編程---查看程ID和父程ID

父進程 elf pycharm __init__ div run 網絡編程 %s 輸出 獲取本進程id: os.getpid() 獲取父進程id: os.getppid() from multiprocessing import Process import ti

2.3.10 Python 函數

臨時 名稱空間 函數定義 綁定 說明 查看 模塊 () globals 名稱空間 又名 name space。 說明:若變量 x=1, 1存放於內存中,那名字x存放在哪裏? 名稱空間正是存放名字x與1綁定關系的地方 名稱空間共三種: locals

Android Retrofit2框架的使用,以及解析複雜Json(其實也不算太複雜

  Retrofit是Square公司的開源專案,是基於OKHttp進行的應用層封裝 Retrofit官方文件:http://square.github.io/retrofit/ Retrofit GitHub地址:https://github.com/square/retro

3SpringBoot 返回JSON資料格式

SpringBoot 返回 JSON 資料格式 github原始碼 方式一:使用自帶的 jackson 將 Controller 層的 @Controller 註解替換成 @RestController 即可 方式二:完美使用 FastJson pom 引入依賴:

python解析複雜json字串

  因為專案需要,公司領導對提出了介面測試的要求,因此作為一個測試人員,我第一時間就想到了jmeter這個利器,前面文章也有說明過怎麼用jmeter做http協議的介面測試,這裡我不再做講解,此篇主要講解如何用python做介面測試,並解析返回結果。 (注意:介面的返回格式是json格式) 一、pytho

Gson解析複雜Json資料

implementation'com.google.code.gson:gson:2.8.0' 然後根據api獲取到的json資料 { "status": "1", "info": "OK", "infocode": "10000",

java解析複雜json資料

java如何解析複雜的json資料 關於json處理的包有好幾個,比如jackson、Gson、Fastjson。Gson是谷歌做的,功能強大;Fastjson是阿里巴巴做的,效能更快。具體用哪個,開心就好。我這裡兩個都沒用,用的是java的一個類庫—json-

Ubuntu分割槽方案(菜鳥方案常用方案和方案)

轉自https://blog.csdn.net/Alvern_Zhang/article/details/48392895 菜鳥方案 “/”與swap兩個分割槽就可以應付絕大多數的應用 常用方案 分為3個區  1. 掛載點/;主分割槽;安裝系統和軟體;大小為30G;分割槽格式為ex

約瑟夫問題,從o(n*m)到o(n)乃至o(m)的演算法複雜

問題描述: n個人(編號1~n),從1開始報數,報到m的退出,剩下的人繼續從1開始報數。按順序輸出列者編號。 1.演算法複雜度為o(n*m) 使用連結串列進行模擬整個遊戲過程 2.演算法複雜度為o(n) 將n個人按照從0~n進行編號,出列的第一個人編號是m%n-1,將

通過GSON解析複雜json資料(二)

這裡我們依舊用上文中的 json 字串 , 由於轉換為 map 依舊需要 javaBean , 所有我們的實體物件也不發生改變 這裡我們需要活用 java 反射和型別對比實現需求 先看程式碼 package com.jacx.test.test01.

java解析複雜json:JSONObject 和 JSONArray的使用

在正式解析之前,我們需要下載解析Json所需要的jar包,一共有7個。下載地址如下:https://download.csdn.net/download/zai_xia/10374080大家也可以自行找資源下載。然後將這些Jar包 Build Path 進專案就好了。特別注意

Gson 解析複雜json字串

    對Gson不瞭解的同學可以先去了解下Gson的基本用法 需要解析的Json字串如下: {"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","index

Linux——基本命令

【1】使用者管理 sudo adduser u1 //新增使用者 sudo deluser --remove-name u1 //刪除使用者 sudo user

JAVA-使用FastJson解析複雜JSON資料

FastJson解析JSON的核心就是把json資料直接轉換成物件,讓解析複雜的json資料變得非常簡單,較大的降低了出錯的可能性。 使用方法: 1.建立JSON資料物件,所有的json鍵值都使用key作為變數名,並且實現set,get函式。 下面試簡單的demo測試複雜的

鄒博機器學習演算法最新版( 吳恩達前輩唐宇迪老師張志華老師多家對比,入門最優 ) --- 獻給想要入門或者想要的朋友

慌慌張張,匆匆忙忙,生活本來就是這樣 很喜歡郝雲的《活著》這首歌,很生動的描述了現代年輕上班族的生活。 時光飛逝,從開始接觸機器學習 已經一年多了,現已成功從安卓移動端轉戰機器學習 現在也如願從事機器學習的工作,雖初出茅廬,卻也拿到了比較滿意的25+ 想起當

web專案開發之分模組管理專案之通用模組

  以前的web專案都是統一一個工程,其他人員在這個專案拉取分支進行開發,但是若需要多個人協作同時進行開發時,會造成各種各樣的問題。為了解決這些問題,按照業務邏輯進行區分,將一個專案按照多個模組進行構建。 (一)所有專案的父模組“parent”   父模組的

java使用jackson解析複雜json字串

為什麼要用 jackson jackson 憑藉其簡潔的語法、高效的處理速度、豐富的功能、清晰的文件等眾多優勢,受到廣大開發者的熱愛,成為了java程式設計師處理json資料的不二選擇。 1 實戰需求 在電商專案中,訂單物流查詢模組,需要接入多方快遞 API