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
class Name{
String id;
String name
}
//所有的setter方法此處省略,其實如果合用的是AS開發可以直接使用工具Gsonfomat一鍵生成javabean很方便
}
復制代碼json節點解析+gson
對於如下json:
json:
{'flag':true,'data':{'name':'張三','age':18,'sex':true}}
復制代碼
gson配置json節點解析的步驟 :
-
獲得 解析者
JsonParser parser = new JsonParser();
-
獲得 根節點元素
JsonElement element = parser.parse(json);
-
根據 文檔判斷根節點屬於 什么類型的 Gson節點對象
// 假如文檔 顯示 根節點 為對象類型 對象類型即 {}表示。[]表示為數組類型。 // 獲得 根節點 的實際 節點類型 JsonObject root = element.getAsJsonObject();
-
取得 節點 下 的某個節點的 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
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。