Java解析json字符串的幾種方法


1. 官方提供的JSONArray與JSONObject

public void parseJsonString(jsonData){
      JSONArray jsonArray = new JSONArray(jsonData);
      for (int i=0; i < jsonArray.length(); i++)    {
           JSONObject jsonObject = jsonArray.getJSONObject(i);
           int id = jsonObject.getInt("bunkId");
           String link = jsonObect.getString("bunkNoteLink");
           System.out.println(id+link);
      }
}

引入jar包

<modelVersion>4.0.0</modelVersion>
<dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
</dependency>

當json字符串根節點是”{}”即表示當前json是對象,直接使用JsonObject進行解析;當json字符串根節點是”[]”即表示當前json是數組對象,需要使用JSONArray進行解析。如果對象屬性是int類型則用getInt方法,是String類型則getString方法。
以下是根節點”{}”與”[]”的示例:

      [{
            "bunkId": 140,
            "residentsId": 132,
            "bunkStatus": 1,
            "rbI": 0,
            "rbX": 0,
            "bunkCoordinate": 1,
            "bunkValue": null,
            "bunkNote": null,
            "bunkNoteLink": null
        },
        {
            "bunkId": 141,
            "residentsId": 475,
            "bunkStatus": 1,
            "rbI": 0,
            "rbX": 0,
            "bunkCoordinate": 1,
            "bunkValue": null,
            "bunkNote": null,
            "bunkNoteLink": null
        }]
      {
            "bunkId": 141,
            "residentsId": 475,
            "bunkStatus": 1,
            "rbI": 0,
            "rbX": 0,
            "bunkCoordinate": 1,
            "bunkValue": null,
            "bunkNote": null,
            "bunkNoteLink": null
        }

2.使用GSON

引入maven依賴jar包,可自行搜索GSON官方文檔

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.6</version>
</dependency>

Gson解析示例:

解析對象示例:
Gson gson = new Gson(); 
MyType target = new MyType();//這是要解析的類型,可根據自己實際需求進行創建
String json = gson.toJson(target); // toJson方法將對象解析為json字符串,參數還可以是其它類型【比如字符串類型】
MyType target2 = gson.fromJson(json, MyType.class); //fromJson方法將json字符串解析為相應對象【參數1為要解析的json字符串,參數2為要解析為相應的類型】

以下是封裝為公共方法示例:
public static <T> T parseJsonWithGson(String jsonData, Class<T> type) {
      Gson gson = new Gson();
      T result = gson.fromJson(jsonData, type);
      return result;
}

解析數組集合示例:
Type listType = new TypeToken<List<String>>() {}.getType();//拿到要解析成為的類型,List<String>可以根據實際需求更改【泛型List<T>】
List<String> target = new LinkedList<String>();
target.add("blah");//target可能理解為要解析的數據對象

Gson gson = new Gson();
String json = gson.toJson(target, listType);//將集合數據解析為字符串
List<String> target2 = gson.fromJson(json, listType);//將json字符串解析為集合對象

以下是封裝為公共方法示例:
public static <T> List<T> parseJsonArrayWithGson(String jsonData,Class<T> type) { 
      Gson gson = new Gson(); 
      List<T> result = gson.fromJson(jsonData, new TypeToken<List<T>>() { }.getType()); 
      return result; 
}

public static <T> String parseJsonArrayWithGson(List<T> list) {
      Gson gson = new Gson();
      Type listType = new TypeToken<List<T>>() {}.getType();
      String json = gson.toJson(list, listType);
      return json;
}

將內嵌json轉換成javabean(包含內部類):
json串:
{
"picture": "image/home01.jpg"
,
"list": [
{
"id": 1525490,
"name": "aaa"
},
{
"id": 1525490,
"name": "bbb"
}
]
}
復制代碼解析如上的json需要如下的javabean:
public class Infos{
String picture;
List list;

class Name{
String id;
String name
}
//所有的setter方法此處省略,其實如果合用的是AS開發可以直接使用工具Gsonfomat一鍵生成javabean很方便
}
復制代碼json節點解析+gson
對於如下json:
json:
{'flag':true,'data':{'name':'張三','age':18,'sex':true}}
復制代碼
gson配置json節點解析的步驟 :

  1. 獲得 解析者

     JsonParser parser = new JsonParser();
    
  2. 獲得 根節點元素

     JsonElement element = parser.parse(json);
    
  3. 根據 文檔判斷根節點屬於 什么類型的 Gson節點對象

     // 假如文檔 顯示 根節點 為對象類型  對象類型即 {}表示。[]表示為數組類型。
     // 獲得 根節點 的實際 節點類型
     JsonObject root = element.getAsJsonObject();
    
  4. 取得 節點 下 的某個節點的 value

     // 獲得 flag 節點的值, flag 節點為基本數據節點
     JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");
     // 基本節點取值
     boolean flag = flagJson.getAsBoolean();
    
     // 獲得 data 節點的值,data 節點為Object數據節點
     JsonObject dataJson = root.getAsJsonObject("data");
     // 將節點上的數據轉換為對象
     Student stu = new Gson().fromJson(dataJson,Student.class);
    

作者:小二陽
鏈接:https://juejin.im/post/6844903528176025614
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

作者:小二陽
鏈接:https://juejin.im/post/6844903528176025614
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM