json解析时自动判断是object还是array

来源:互联网 发布:cf淘宝网 黄金套装 编辑:程序博客网 时间:2024/05/16 07:27

参考:
jsonObject.getString()解析任意字段均可强转为string
json解析时自动判断是object还是array

解析json时遇到的问题,返回的json内容中可能为jsonArray,也可能是jsonObject,

当只有一个信息时是jsonObject,有多个信息时是jsonArray,如果去修改json的返回格式有些不现实。通过字符判断的话又很麻烦。
{“scm”:{“key1”:”vlaue1”,”key2”:”vlaue2”}}
{“scm”:[{“key1”:”vlaue1”,”key2”:”vlaue2”},{“key11”:”vlaue11”,”key22”:”vlaue22”}]}

解决方案:通过JSONTokener解析,JSONTokener在解析过程中可以自动转换为对应的类型

jsonObject.getString()解析任意字段均可强转为string
使用 JSONTokener的JSONTokener.nextValue() 会给出一个对象,然后可以动态的转换为适当的类型。

String jsonStr = "...."; //json字符串  Object json = new JSONTokener(jsonStr).nextValue();  if(json instanceof JSONObject){      JSONObject jsonObject = (JSONObject)json;      //further actions on jsonObjects      //...  }else if (json instanceof JSONArray){      JSONArray jsonArray = (JSONArray)json;      //further actions on jsonArray      //...  }  

示例:

 if (jsonObject.has("data")) {   Object listArray = new JSONTokener(jsonObject.getString("data")).nextValue();   if (listArray instanceof JSONObject){      JSONObject dataJsonObject = (JSONObject)listArray;      model.data = dataJsonObject;      if (dataJsonObject.has("token")) {        model.token = dataJsonObject.getString("token");      }    }}