簡體   English   中英

哪種解析Android中的JSON數據最好?

[英]Which is the best way to parse JSON data in Android?

我有要解析的JSON數據。 結構不是固定的,有時它作為單個字符串出現,有時作為數組出現。

目前,我們正在使用GSON庫來解析JSON,但是當它作為數組出現時會遇到問題。

例如:

1.  {"msg":"data","c":300,"stat":"k"}


2. {
    "msg": [
        " {\"id\":2,\"to\":\"83662\",\"from\":\"199878\",\"msg\":\"llll\",\"c\":200,\"ts\":1394536776}"
     ],
     "c": 200,
     "stat": "k",
     "_ts": 1394536776
 }

在上面的示例中,有時我將msg作為字符串,有時作為數組。

誰能幫我? 如果我決定使用JSON解析,那將非常繁瑣,因為我有大約20多個要解析的API,每個API包含50個字段的最小值。

您可以使用JSONObjectJSONArray類而不是GSON來處理JSON數據

對於第一個例子

String jsonStr = "{\"msg\":\"data\",\"c\":300,\"stat\":\"k\"}";

JSONObject jsonObj = new JSONObject(jsonStr);

String msg = jsonObj.getString("msg");
Integer c = jsonObj.getInteger("c");
String stat = jsonObj.getString("stat");

對於第二個例子

   String jsonStr = ... // "your JSON data";

   JSONObject jsonObj = new JSONObject(jsonStr);

   JSONArray jsonArr = jsonObj.getJSONArray("msg");

   JSONObject arrItem = jsonArr.getJSONObject(0);

   //and so on

此外,JSONObject類具有方法opString,opArray如果您嘗試獲取的數據不存在或類型錯誤,則不會拋出異常

例如

JSONArray arr = jsonObj.optJSONArray("msg");
JSONObject msg = null;
if (arr != null) {
    msg = arr.getJSONObject(0)
} else {
   msg = jsonObj.getJSONObject("msg");
}

您可以使用Google GSON lib直接將json解析為類對象。 這很容易也很准確。如果代碼是300就直接解析沒有GSON的json對象,那么時間代碼就不同了。 如果代碼是200則使用GSON(定義類似的java類)

String c= json.getString("c");
if(c.equals("300")
String message = status.getString("msg");

有兩種方法可以實現JSON。

  1. 手動使用Android OS JSON Parser Android JSON解析和轉換
  2. 使用GSON Library [Library]( https://code.google.com/p/google-gson/downloads/list )。 如果您知道json響應的所有參數和模型,這很容易處理。

請參閱下面的代碼段,使用Google的Gson庫反序列化您的json,無例外。

String jsonStr = "your json string ";

Gson gson = new Gson();
JsonObject jsonObj = gson.fromJson (jsonStr, JsonElement.class).getAsJsonObject();

JsonElement elem = jsonObj.get("msg");

if(elem.isJsonArray()) { //**Array**
   ArrayList<MyMessage> msgList = gson.fromJson(elem.toString(), new TypeToken<List<MyMessage>>(){}.getType());
} else if(elem.isJsonObject()) { //**Object**
   Note note = gson.fromJson(elem.toString(), MyMessage.class);
} else {  //**String**
   String note = elem.toString();
}

MyMessage類

public class MyMessage {
   String to;
   String from;
   String msg;
   int id;
   int c;
   long ts;

   // Setters and Getters
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM