Java多层嵌套JSON类型数据的方法
短信预约 -IT技能 免费直播动态提醒
本篇内容介绍了“Java多层嵌套JSON类型数据的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
多层嵌套JSON类型数据解析
简单来说:
“key”:“value” --> 此时value为String
“key":0 --> 此时value为int
“key”:{“k1”:“v1”} --> 此时value为JSONObject
“key”:[v] --> 此时value为JSONArray
以下举例数据结构
{ "error": 0, "status": "success", "results": [ { "currentCity": "青岛", "index": [ { "title": "穿衣", "zs": "较冷", "tipt": "穿衣指数", "des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。" }, { "title": "紫外线强度", "zs": "中等", "tipt": "紫外线强度指数", "des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。" } ] } ]}
解析代码
public class Test {public static void main(String[] args) { String s = "{\"error\":0,\"status\":\"success\",\"results\":[{\"currentCity\":\"青岛\",\"index\":[{\"title\":\"穿衣\",\"zs\":\"较冷\",\"tipt\":\"穿衣指数\",\"des\":\"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。\"},{\"title\":\"紫外线强度\",\"zs\":\"最弱\",\"tipt\":\"紫外线强度指数\",\"des\":\"属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。\"}],}]}"; JSONObject jsonObject = JSONObject.fromObject(s); //提取出error为 0 int error = jsonObject.getInt("error"); System.out.println("error:" + error); //提取出status为 success String status = jsonObject.getString("status"); System.out.println("status:" + status); //注意:results中的内容带有中括号[],所以要转化为JSONArray类型的对象 JSONArray result = jsonObject.getJSONArray("results"); for (int i = 0; i < result.size(); i++) { //提取出currentCity为 青岛 String currentCity = result.getJSONObject(i).getString("currentCity"); System.out.println("currentCity:" + currentCity); //注意:index中的内容带有中括号[],所以要转化为JSONArray类型的对象 JSONArray index = result.getJSONObject(i).getJSONArray("index"); for (int j = 0; j < index.size(); j++) { String title = index.getJSONObject(j).getString("title"); System.out.println("title:" + title); String zs = index.getJSONObject(j).getString("zs"); System.out.println("zs:" + zs); String tipt = index.getJSONObject(j).getString("tipt"); System.out.println("tipt:" + tipt); String des = index.getJSONObject(j).getString("des"); System.out.println("des:" + des); } }}}
json解析多层嵌套并转为对应类(List)
Json(随便扒的格式,将就看~)
{ "code": 1, "message": "查询成功", "data": [ { "type": 1, "question": "地层压力与同井深的淡水静液压力之比称为地层的()。", "answer": "1", "id": 1, "description": "题目描述", "answers": [ { "isCorrect": "1", "answer_name": "A的选项内容" }, { "isCorrect": "0", "answer_name": "B的选项内容" }, { "isCorrect": 0, "answer_name": "C的选项内容" }, { "isCorect": "0", "answer_name": "D的选项内容" } ] }, { "type": 1, "question": "起钻时,产生的抽吸压力导致井底压力()。", "answer": "1", "id": 1, "description": "题目描述", "answers": [ { "isCorrect": 1, "answer_name": "A的选项内容" }, { "isCorrect": 0, "answer_name": "B的选项内容" }, { "isCorrect": 0, "answer_name": "C的选项内容" }, { "isCorrect": 0, "answer_name": "D的选项内容" } ] } ]}
关键依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.72</version> </dependency>
JSONObject param = testDate(); JSONObject param1 = testHeader("QUERY"); String rDate = HealthServerHandler.getInstance().post(url,param1.toJSONString(), param.toJSONString()); //这个依赖是com.google.code.gson;因为报错原因未知(报错下面图中显示),更换了阿里的依赖 //RecOrder<ResultValue<PurchaseOrder, PageInfo>> recOrder = new Gson().fromJson(rDate, RecOrder.class); //处理json将类填充,入库 JSONObject rDateJSON = JSONObject.parseObject(rDate); //这里获取的是"resultValue"标签下面“data”这个JSONArray JSONArray data = rDateJSON.getJSONObject("resultValue").getJSONArray("data"); //这里获取的是"resultValue"标签下面“pageInfo”这个JSONObject JSONObject pageInfo = rDateJSON.getJSONObject("resultValue").getJSONObject("pageInfo"); //PurchaseOrder 是具体接收类 List<PurchaseOrder> purchaseOrder = JSONArray.parseArray(data.toString(),PurchaseOrder.class); PageInfo pageInfo1 = JSONObject.parseObject(pageInfo.toString(),PageInfo.class); //茵PageInfo与PurchaseOrder并不在同一结构内,需要二次添加 for (PurchaseOrder order : purchaseOrder) { order.setPageCount(pageInfo1.getPageCount()); order.setPageNum(pageInfo1.getPageNum()); order.setTotal(pageInfo1.getTotal()); order.setPageSize(pageInfo1.getPageSize()); service.saveOrder(order); }
package jansonDemo;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;public class TestJSON { private static void strWritedToJSONObject() { //以下是一个json对象中嵌套一个json子对象 String myJsonObj = "{\n" + " \"name\":\"runoob\",\n" + " \"alexa\":10000,\n" + " \"sites\": {\n" + " \"site1\":\"www.runoob.com\",\n" + " \"site2\":\"m.runoob.com\",\n" + " \"site3\":\"c.runoob.com\"\n" + " }\n" + "}"; JSONObject jsonobj = JSON.parseObject(myJsonObj); //将json字符串转换成jsonObject对象 System.out.println(jsonobj.get("name")); //取出name对应的value值,得到的是一个object System.out.println(jsonobj.getString("name")); //取出name对应的value值,得到的是一个String System.out.println(jsonobj.getIntValue("alexa")); //取出name对应的value值,得到的是一个int System.out.println(jsonobj.get("sites")); //取出sites对应的value值,得到的是一个object System.out.println(jsonobj.getString("sites")); System.out.println(jsonobj.getJSONObject("sites")); //取出sites对应的value值,得到一个JSONObject子对象 System.out.println(jsonobj.getJSONObject("sites").getString("site2")); //取出嵌套的JSONObject子对象中site2对应的value值,必须用getJSONObject()先获取JSONObject String myJsonObj2 = "{\n" + " \"name\":\"网站\",\n" + " \"num\":3,\n" + " \"sites\": [\n" + " { \"name\":\"Google\", \"info\":[ \"Android\", \"Google 搜索\", \"Google 翻译\" ] },\n" + " { \"name\":\"Runoob\", \"info\":[ \"菜鸟教程\", \"菜鸟工具\", \"菜鸟微信\" ] },\n" + " { \"name\":\"Taobao\", \"info\":[ \"淘宝\", \"网购\" ] }\n" + " ]\n" + "}"; JSONObject jsonobj2 = JSON.parseObject(myJsonObj2); //将json字符串转换成jsonObject对象 System.out.println(jsonobj2.get("sites")); System.out.println(jsonobj2.getString("sites")); System.out.println(jsonobj2.getJSONArray("sites")); //取出sites对应的value值,得到一个JSONOArray对象 //System.out.println(jsonobj2.getJSONObject("sites")); 不能用该方法,因为sites是一个JSONOArray对象 //取出json对象中sites对应数组中第一个json子对象的值 System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0)); //得到结果:{"name":"Google","info":["Android","Google 搜索","Google 翻译"]} System.out.println(jsonobj2.getJSONArray("sites").get(0)); System.out.println(jsonobj2.getJSONArray("sites").getString(0)); //取出json对象中sites对应数组中第一个json子对象下面info对应的嵌套子数组值 System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info")); //得到结果:["Android","Google 搜索","Google 翻译"] //取出json对象中sites对应数组中第一个json子对象下面info对应的嵌套子数组中第二个值 System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info").getString(1)); //得到结果:Google 搜索 //依次取出json对象中sites对应数组中的值 JSONArray array = jsonobj2.getJSONArray("sites"); getJsonArrayItem(array); //依次取出json对象中sites对应数组中第二个json子对象下面info对应的嵌套子数组值 JSONArray arr = jsonobj2.getJSONArray("sites").getJSONObject(1).getJSONArray("info"); getJsonArrayItem(arr); } private static void writeStrToJSONObject() { JSONObject jsonObject = new JSONObject(); jsonObject.put("name","tom"); jsonObject.put("age",20); JSONArray jsonArray = new JSONArray(); JSONObject jsonArrayObject1 = new JSONObject(); jsonArrayObject1.put("name","alibaba"); jsonArrayObject1.put("info","www.alibaba.com"); JSONObject jsonArrayObject2 = new JSONObject(); jsonArrayObject2.put("name","baidu"); jsonArrayObject2.put("info","www.baidu.com"); jsonArray.add(jsonArrayObject1); jsonArray.add(jsonArrayObject2); jsonObject.put("sites",jsonArray); System.out.println(jsonObject); } private static void strToJsonArray() { String arrayStr = "[\n" + " {\n" + " \"name\":\"alibaba\",\n" + " \"info\":\"www.alibaba.com\"\n" + " },\n" + " {\n" + " \"name\":\"baidu\",\n" + " \"info\":\"www.baidu.com\"\n" + " }\n" + " ]"; JSONArray array = JSON.parseArray(arrayStr); System.out.println(array); } private static void getJsonArrayItem(JSONArray array) { for (int i=0; i<array.size(); i++) { System.out.println(array.get(i)); } } //测试类 public static void main(String[] args) { strWritedToJSONObject(); //writeStrToJSONObject(); //strToJsonArray(); }}
JAVABEAN转JSONObject
String jsonString=JSONObject.toJSONString(param);JSONObject jSONObject=JSONObject.parseObject(jsonString);
“Java多层嵌套JSON类型数据的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341