[英]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個字段的最小值。
您可以使用JSONObject和JSONArray類而不是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。
請參閱下面的代碼段,使用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.