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节点解析的步骤 :
-
获得 解析者
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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。