Java|Java 多层嵌套JSON类型数据全面解析

目录

  • 多层嵌套JSON类型数据解析
    • 以下举例数据结构
    • 解析代码
  • json解析多层嵌套并转为对应类(List)
    • Json(随便扒的格式,将就看~)
    • 关键依赖
    • JAVABEAN转JSONObject

多层嵌套JSON类型数据解析 【Java|Java 多层嵌套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为 0int error = jsonObject.getInt("error"); System.out.println("error:" + error); //提取出status为 successString 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的选项内容"}]}]}


关键依赖
com.alibabafastjson1.2.72

JSONObject param = testDate(); JSONObject param1 = testHeader("QUERY"); String rDate = HealthServerHandler.getInstance().post(url,param1.toJSONString(), param.toJSONString()); //这个依赖是com.google.code.gson; 因为报错原因未知(报错下面图中显示),更换了阿里的依赖//RecOrder recOrder = new Gson().fromJson(rDate, RecOrder.class); //处理json将类填充,入库JSONObject rDateJSON = JSONObject.parseObject(rDate); //这里获取的是"resultValue"标签下面“data”这个JSONArrayJSONArray data = https://www.it610.com/article/rDateJSON.getJSONObject("resultValue").getJSONArray("data"); //这里获取的是"resultValue"标签下面“pageInfo”这个JSONObjectJSONObject pageInfo = rDateJSON.getJSONObject("resultValue").getJSONObject("pageInfo"); //PurchaseOrder 是具体接收类List 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); }

Java|Java 多层嵌套JSON类型数据全面解析
文章图片

package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class TestJSON {/*** JSON实际上也是键值对("key":"value")* key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)* value如果是字符串,用jsonobj.getString("key")获取* value如果是数字,用jsonobj.getIntValue("key"),jsonobj.getFloatValue("key"),jsonobj.getInteger("key")等基本数据类型及其包装类的方法获取* value如果是布尔值,用jsonobj.getBoolean("key"),jsonobj.getBooleanValue("key")获取* value如果是数组,用jsonobj.getJSONArray("key")获取* value如果是Object对象,用jsonobj.get("key"),获取* value如果是JSONObject对象,用jsonobj.getJSONObject("key")获取*//*** 该方法用于将已有的json字符串转换为json对象,并取出该对象中相应的key对应的value值* 将已有的字符串转换成jsonobject,用JSON.parseObject(jsonStr)方法* json中只要是{}就代表一个JSONObject,[]就代表一个JSONArray* 获取JSONObject对象用JSONObject jsonobject.getJSONObject("key")方法* 获取JSONArray对象用JSONObject jsonobject.getJSONArray("key")方法*/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对象/***获取JSONObject中每个key对应的value值时,可以根据实际场景中想得到什么类型就分别运用不到的方法***/System.out.println(jsonobj.get("name")); //取出name对应的value值,得到的是一个objectSystem.out.println(jsonobj.getString("name")); //取出name对应的value值,得到的是一个StringSystem.out.println(jsonobj.getIntValue("alexa")); //取出name对应的value值,得到的是一个intSystem.out.println(jsonobj.get("sites")); //取出sites对应的value值,得到的是一个objectSystem.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/*** 以下是一个json对象中包含数组,数组中又包含json子对象和子数组*/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); }/*** 手动添加对象到一个JSONObject*/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); }/*** 将字符串转为JSONArray*/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); }/*** 依次取出JSONArray中的值*/private static void getJsonArrayItem(JSONArray array) {for (int i=0; i
JAVABEAN转JSONObject
String jsonString=JSONObject.toJSONString(param); JSONObject jSONObject=JSONObject.parseObject(jsonString);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读