新西兰服务器

Java多层嵌套JSON类型数据的方法


Java多层嵌套JSON类型数据的方法

发布时间:2022-01-31 13:24:02 来源:高防服务器网 阅读:85 作者:iii 栏目:开发技术

本篇内容介绍了“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 {      /**       * 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值,得到的是一个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          /**           * 以下是一个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<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类型数据的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注高防服务器网网站,小编将为大家输出更多高质量的实用文章!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[