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包

4.0.0

      org.json
      json
      RELEASE
      compile

当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官方文档


  com.google.code.gson
  gson
  2.8.6

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 parseJsonWithGson(String jsonData, Class type) {
      Gson gson = new Gson();
      T result = gson.fromJson(jsonData, type);
      return result;
}

解析数组集合示例:
Type listType = new TypeToken>() {}.getType();//拿到要解析成为的类型,List可以根据实际需求更改【泛型List】
List target = new LinkedList();
target.add("blah");//target可能理解为要解析的数据对象

Gson gson = new Gson();
String json = gson.toJson(target, listType);//将集合数据解析为字符串
List target2 = gson.fromJson(json, listType);//将json字符串解析为集合对象

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

public static  String parseJsonArrayWithGson(List list) {
      Gson gson = new Gson();
      Type listType = new TypeToken>() {}.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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(Java解析json字符串的几种方法)