json解析時自動判斷是object還是array
阿新 • • 發佈:2019-01-02
最近解析json時遇到的問題,返回的json內容中可能為jsonArray,也可能是jsonObject,
當只有一個資訊時是jsonObject,有多個資訊時是jsonArray,如果去修改json的返回格式有些不現實。通過字元判斷的話又很麻煩。
{"scm":{"key1":"vlaue1","key2":"vlaue2"}}
{"scm":[{"key1":"vlaue1","key2":"vlaue2"},{"key11":"vlaue11","key22":"vlaue22"}]}
解決方案:通過JSONTokener解析,JSONTokener在解析過程中可以自動轉換為對應的型別
程式碼示例如下:
// String json ="{\"scm\":{\"key1\":\"vlaue1\",\"key2\":\"vlaue2\"}}"; String json ="{\"scm\":[{\"key1\":\"vlaue1\",\"key2\":\"vlaue2\"},{\"key11\":\"vlaue11\",\"key22\":\"vlaue22\"}]}"; JSONObject jsonObject =JSONObject.fromObject(json); Object listArray = new JSONTokener(jsonObject.getString("scm")).nextValue(); if (listArray instanceof JSONArray){ JSONArray jsonArray = (JSONArray)listArray; for (int k = 0; k < jsonArray.size(); k++) { JSONObject parameterObject = jsonArray.getJSONObject(k); System.out.println(parameterObject); } }else if (listArray instanceof JSONObject) { JSONObject jsonObject3 = (JSONObject)listArray; System.out.println(jsonObject3); }
輸入如下:
1
輸入:{\"scm\":{\"key1\":\"vlaue1\",\"key2\":\"vlaue2\"}}
輸出:{"key1":"vlaue1","key2":"vlaue2"}
2
輸入:{\"scm\":[{\"key1\":\"vlaue1\",\"key2\":\"vlaue2\"},{\"key11\":\"vlaue11\",\"key22\":\"vlaue22\"}]}
輸出:
{"key1":"vlaue1","key2":"vlaue2"}
{"key11":"vlaue11","key22":"vlaue22"}