最近很多朋友问到我解析Json的问题,很多都是太复杂,解析起来很麻烦,但大部分都是使用工具进行解析,比如Gson之类的,但是这些有个问题就是要创建一个实体类bean,但是往往在很多开发过程中,后台返回数据是会随着迭代而改变的,这样创建的实体类bean可能也要改变,这里我就说说自己解析的一些心得。
首先我并没有用到第三方的解析工具,而是单纯的使用系统提供的JsonObject和JsonArray。然后获取到的数据字段存储我是用到的HashMap,这样就对于实体类很吻合了,key对应的实体类里面变量名字,value对应实体类里的变量值。如果有集合就可以在HashMap外面套上Arraylist之类的。
下面就开始提供代码块:
privateHashMap stringToJsonObject(String response) {
try{
JSONObject jsa =newJSONObject(response);
returnJsonToHashMap(jsa);
}catch(JSONException e) {
e.printStackTrace();
returnnull;
}
}
privateHashMap JsonToHashMap(JSONObject jsa) {
HashMap hashmap =newHashMap<>();
try{
for(Iterator keyStr = jsa.keys(); keyStr.hasNext(); ) {
String key1 = keyStr.next().trim();
if(jsa.get(key1)instanceofJSONObject) {
hashmap.put(key1, jsa.get(key1));
}
}
}catch(JSONException e) {
e.printStackTrace();
}
returnhashmap;
}
这样就可以将一个jsonObject转换成HashMap了,但是HashMap里面还是含有类似Json的,那就再重复上面操作就行了。
下面再来解析JsonObject
publicArrayList> dataListTmp =newArrayList>();
ry {
JSONObject jsonObject =newJSONObject(respanse);
JSONArray jsonArray =newJSONArray(jsonObject.getString("result"));
JSONObject jsonObject1 =newJSONObject(jsonArray.get(0).toString());
JSONArray jsonArray1 =newJSONArray(jsonObject1.getString("Items"));
for(inti =0; i < jsonArray1.length(); i++) {
JSONObject jsoo = jsonArray1.getJSONObject(i);
HashMap map1 =newHashMap();
Iterator it = jsoo.keys();
while(it.hasNext()) {
String key = (String) it.next();
String value = jsoo.getString(key);
map1.put(key, value);
}
dataListTmp.add(map1);
}
}catch(JSONException e) {
e.printStackTrace();
}
通过一个Iterator迭代一下就可以获取到key和value,具体还是需要看看具体需求,随机应变。先将json分析一下,一般公司后台提供json都有一定规律的,因此一些解析方式可以在项目中提取出来,完全可以复用,再也不用去新建bean实体类了,也抛开了第三方工具的使用。
csdn项目地址:http://blog.csdn.net/greatdaocaoren/article/details/73826711
网友评论