负责爬虫模块的同学丢给了我这样的一些json数据,从中取两条放在这里。
[{
"caiming": "藜麦鸡肉丸",
"chengpin": "http://s1.st.meishij.net/r/178/85/5833928/s5833928_151843048575508.jpg",
"biaoqian": ["清热解毒", "美容养颜", "延年益寿", "抵抗力", "降糖", "保护视力", "助消化", "养肾", "消食"],
"gongyi": "蒸",
"kouwei": "咸鲜味",
"nandu": "初级入门",
"renshu": "未知",
"zhunbeishijian": "60分钟",
"pengrenshijian": "<30分钟",
"zhuliao": { "鸡蛋清": "35克", "胡萝卜": "20克", "鸡肉": "100克", "淀粉": "15克", "三色藜麦": "10克" },
"fuliao": { "香菇虾皮粉": "2克", "香葱": "6克" },
"guocheng": { "1": ["参考月龄:12个月以上,对食材不过敏的宝宝", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843079008009.jpg"], "2": ["1. 三色藜麦倒入碗中,加入清水,浸泡2个小时,藜麦是复合淀粉高膳食纤维食物,煮之前需要较长时间吸足水份才容易变软。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843083766525.jpg"], "3": [" 浸泡好的藜麦倒入锅中,煮15分钟。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843085640683.jpg"], "4": [" 稍晾凉,过滤掉水分。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843088125481.jpg"], "5": [" 香葱切成末。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843089792645.jpg"], "6": ["胡萝卜洗净削皮,切成小丁。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843091952558.jpg"], "7": ["鸡胸肉去掉表面白色的筋膜,洗净切成小丁。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843093628392.jpg"], "8": ["切好的鸡胸肉丁,倒入料理机中,加入胡萝卜丁,倒入提前准备好的蛋清。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843121331477.jpg"], "9": [" 搅打成细腻的胡萝卜鸡肉泥, 给宝宝做丸子的时候,最好要多搅拌两次,或者搅拌的时间长一些,让肉馅更细腻一些。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843124570656.gif"], "10": ["搅打细腻的肉馅倒入碗中,倒入淀粉和香菇虾皮粉。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843127297042.jpg"], "11": ["加入香葱和煮好的三色藜麦,用筷子搅拌均匀。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843129682707.gif"], "12": ["加入少许的油。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843132038059.jpg"], "13": ["接着把调好的鸡肉泥放入裱花袋中,裱花袋也可以用厚一点的保鲜袋代替,剪开一个手指那么大的口子。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843132935327.jpg"], "14": ["锅中倒上水,烧开后转小火让水呈微沸的状态,鸡肉泥挤在小勺里后再放入锅中。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843135040926.gif"], "15": ["依次挤入小丸子,继续煮5分钟,轻轻搅动,至小丸子全部浮起 。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843137018103.gif"], "16": [". 煮好盛出,放入保鲜盒中密封,冰箱冷藏可以保存3天左右,冷冻可以保存7天左右。", "http://s1.st.meishij.net/rs/178/85/5833928/n5833928_151843138719725.jpg"] } },
{
"caiming": "清蒸豆豉石斑鱼",
"chengpin": "http://s1.st.meishij.net/r/68/166/12416568/s12416568_151764937493567.jpg",
"biaoqian": ["散瘀止痛", "开胃"],
"gongyi": "蒸",
"kouwei": "家常味",
"nandu": "",
"renshu": "",
"zhunbeishijian": "",
"pengrenshijian": "<30分钟",
"zhuliao": { "石斑鱼": "一条" },
"fuliao": { "豆豉": "适量", "葱": "适量", "老姜": "适量", "料酒": "适量", "酱油": "适量", "芡粉": "少量", "食盐": "少量", "花椒": "少量" },
"guocheng": { "1": ["1石斑鱼洗净,剪去锋利的鱼鳍,去鳞去腮去内脏,鱼背上横划几刀,少许料酒、少许食盐,加适量葱段、老姜、花椒几颗腌制15分钟,鱼肚子里也要放姜葱。", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937426090.jpg"], "2": ["2腌鱼等待时,先调汁备用:蒸鱼酱油+姜+葱+芡粉+冷开水", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937693307.jpg"], "3": ["3锅内入水,烧开后,鱼下锅,偏大火蒸10分钟后,快递倒掉盘中多余的蒸汽水汁", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937756041.jpg"], "4": ["4淋入酱油汤汁和豆豉,大火再蒸5分钟(备注:豆豉准备好,若买的是无油的生豆豉,建议可加些油先下锅炒一下。)", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937864325.jpg"], "5": ["5关火,放葱丝,起锅", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937987694.jpg"], "6": ["6上桌", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764938022106.jpg"] } }]
分析
可以看到里面的属性其实还是挺复杂的,不过我们理清楚里面的关系,取出想要的数据还是非常方便的。
一共有菜名、成品、标签(数组)、工艺、口味、难度、人数、准备时间、烹饪时间、主料(字典)、辅料(字典)、过程(字典,其中value为数组)这些属性,其中是数组或者字典的已经在小括号里面标注出来了。
Maven相关安装
在pom.xml里面的dependencies标签下,加入
<dependency>
<groupId>net.sf.json-libgroupId>
<artifactId>json-libartifactId>
<version>2.4version>
<classifier>jdk15classifier>
dependency>
标签分析与处理
1.无嵌套数组及字典的key value类型
那么对于一般的key value类型的数据,如菜名,处理起来非常方便。在将json放入JSONObject中后,调用get(“字段名”)即可。
例如System.out.println("[" + i + "]name=" + jsonObject.get("caiming"));
2.字典类型
使用遍历器iterator
如对fuliao
JSONObject fuliaoarr = (JSONObject) jsonObject.get("fuliao")
Iterator iterator = fuliaoarr.keys()
while(iterator.hasNext()){
String key = (String) iterator.next()
String value = fuliaoarr.getString(key)
System.out.println("key: "+key+"value: "+value)
}
即可。
3.字典嵌套数组类型
"guocheng": {
"1": ["1石斑鱼洗净,剪去锋利的鱼鳍,去鳞去腮去内脏,鱼背上横划几刀,少许料酒、少许食盐,加适量葱段、老姜、花椒几颗腌制15分钟,鱼肚子里也要放姜葱。", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937426090.jpg"],
"2": ["2腌鱼等待时,先调汁备用:蒸鱼酱油+姜+葱+芡粉+冷开水", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937693307.jpg"],
"3": ["3锅内入水,烧开后,鱼下锅,偏大火蒸10分钟后,快递倒掉盘中多余的蒸汽水汁", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937756041.jpg"],
"4": ["4淋入酱油汤汁和豆豉,大火再蒸5分钟(备注:豆豉准备好,若买的是无油的生豆豉,建议可加些油先下锅炒一下。)", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937864325.jpg"],
"5": ["5关火,放葱丝,起锅", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764937987694.jpg"],
"6": ["6上桌", "http://s1.st.meishij.net/rs/68/166/12416568/n12416568_151764938022106.jpg"]
}
这个是步骤序号:[步骤内容,步骤图片]是比较复杂的了,但是我们不要急,一层一层将其剥开即可。
1)首先使用iterator获得字典的所有key
JSONObject guochengarr = (JSONObject) jsonObject.get("guocheng");
2)随后遍历每一个步骤,将key的内容转为一个JSONArray对象
while(iterator.hasNext()){
String key = (String) iterator.next();
JSONArray json = JSONArray.fromObject(fuliaoarr.getString(key));
...
}
3)遍历数组内容,附上全代码
JSONObject guochengarr = (JSONObject) jsonObject.get("guocheng");
while(iterator.hasNext()){
String key = (String) iterator.next();
JSONArray json = JSONArray.fromObject(fuliaoarr.getString(key));
if(json.size()>0){
for(int j=0;jget(j);
System.out.println(content);
}
}
}