解析复杂的JSON数据
例:
{“result”:
[
{“score”:0.701022,“root”:“人物-人物特写”,“keyword”:“美女”,“baike_info”:
{“baike_url”:“http://baike.baidu.com/item/%E7%BE%8E%E5%A5%B3/109596”
,“image_url”:“http://imgsrc.baidu.com/baike/pic/item/91529822720”
+ “e0cf3acdfc0280046f21fbe09aa3d.jpg”,“description”:“美女是一个汉语词汇,拼音是:měi nǚ,释义:容貌姣好、仪态优雅的女子。中国古代关于美女的形容词和诗词歌赋众多,形成了丰富的美学资料。
}
},
{“score”:0.516248,“root”:“商品-穿戴”,“keyword”:“上衣”,“baike_info”: {“baike_url”:“http://baike.baidu.com/item/%E4%B8%8A%E8%A1%A3/10200813”,“image_url”:“http://imgsrc.baidu.com/baike/pic/item/63d9f2d3572c11df054fe42b6d2762d0f703c218.jpg”,“description”:”[词目]上衣[拼音]shàng yī[英文] Tops;Coat;Jacket[解释]1.外衣。2.上身穿的衣服。3.上衣的分类有学生装、军便装、夹克衫、两用衫、T恤等等类型。穿于人体上身的常用服装。一般由领、袖、衣身、袋4部分构成,并由此4部分的造型变化形成不同款式。4.传统服饰。外衣。此称始于汉。《论语·乡党》\u201c当暑袗絺绤,必表而出之\u201d,何晏集解引孔安国曰:\u201c暑则单服。絺绤,葛也。"
}
},{“score”:0.329718,“root”:“商品-服装”,“keyword”:“吊带睡衣”,“baike_info”:
{}
},{“score”:0.029778,“root”:“人物-人物特写”,“keyword”:“人物特写”,“baike_info”:
{}
}
],
“log_id”:3870743702425521491,“result_num”:5}
这是一个json串 我用不同的颜色将他分成多层
简单的json串我们可以直接通过 getString(字段名)来直接获取对应数据;
n层的串就相当于一个n层的k-v对我们不能直接用getString()取出来 因为里面每一层都是一个 n-1层的json串
需要先利用 getJSONArray(“字段名”’);将里层的所有数据放到一个JSONObject中
然后再利用getString(字段名)获取数据
如果数据在下一层 则继续利用 getJSONArray 将下一层的json提取出来
然后再利用 getString(字段名)获取。
比如 我们要取上面json串中的 “score”:0.701022.
//该json变量名为 res 假定所有v都是字符串
JSONArray jsonArray = res.getJSONArray("result");
//拆最外层 将最外层数据存储到 jsonArray 中
JSONObject jsonObject = jsonArray.getJSONObject(0);
//我们发现该json串最外层的第一个字段值是一个数组,我们通过getJSONArray把这个数组放到JSONArray中
//然后我们利用getJSONObject(0)将这个数组中的 0就是下标的意思 代表这个数组中第一个json串。
String score = jsonObject .getString("score");
//这样我们就已经将0.7201022放到score中了
// 如果我们想要取上面baike_url对应的v我们需要继续拆json串
JSONObject jsonObject2 = jsonObject.getJSONObject("baike_info");
/*这样我们就相当于将 {“baike_url”:“http://baike.baidu.com/item/%E7%BE%8E%E5%A5%B3/109596”
“image_url”:“http://imgsrc.baidu.com/baike/pic/item/91529822720”
+ “e0cf3acdfc0280046f21fbe09aa3d.jpg”,“description”:“美女是一个汉语词汇,拼音是:měi nǚ,释义:容貌姣好、仪态优雅的女子。中国古代关于美女的形容词和诗词歌赋众多,形成了丰富的美学资料。
} 这些数据以一个心得json串存放到了jsonObject2中
*/
String baike_url = jsonObject2.getString("baike_url");
//这样我们就获取到了第三层的数据 如果想要得到第四层或者等过层的数据只需要一直jsonArray.getJSONObject(下一个json串名) 直到将你要获取的字段所咋的层解析到一个jsonObject中 然后 通过 getString()方法获取指定字段数据就好了
/*
*注: JSONArray 中存储了多个json串 并列关系+嵌套关系
* JSONObject 中存储了一个json串 嵌套关系
* 获取下一个json串都是 通过getJSONObject()方法 但是参数 不同
* JSONArray参数是json串在这一组数据中的下标从零开始
* JSONObject参数是json串的字段名通过 k获取
*/