Java多层嵌套JSON类型数据的方法
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容介绍了"Java多层嵌套JSON类型数据的方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2025年01月20日Java多层嵌套JSON类型数据的方法
本篇内容介绍了"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的选项内容" } ] } ]}
关键依赖
com.alibaba fastjson 1.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"这个JSONArray JSONArray data = rDateJSON.getJSONObject("resultValue").getJSONArray("data"); //这里获取的是"resultValue"标签下面"pageInfo"这个JSONObject JSONObject 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); }
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; iJAVABEAN转JSONObject
String jsonString=JSONObject.toJSONString(param);JSONObject jSONObject=JSONObject.parseObject(jsonString);"Java多层嵌套JSON类型数据的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
对象
内容
数组
方法
类型
字符
字符串
数据
紫外线
强度
多层
压力
外套
建议
指数
搜索
套子
实际
结果
青岛
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
zoo授权管理服务器授权码
图钉下载软件开发
数据库表名有用户名
微信全国有多少服务器
城镇地籍调查数据库每张表
济宁网络安全公务员
城阳区ios软件开发企业
罗叶草互联网科技有限公司
数据库数据存储结构
自己的服务器怎么正向代理
老电脑如何改装服务器
潮剧视频软件开发
网络安全审查意见范文
基于构件的软件开发模型
开展网络安全监测工作
网络安全主题班会教案小学
中石化网络安全教育报告
图腾服务器标准机柜
数据汇编第五单元设计数据库
成都有公司招聘服务器专业人员吗
数据采集软件开发交流
数据库领域的发展现状
it服务器制造
全球网络安全短缺
事务数据库的基本含义
数据库优化工具研发
股票交易软件开发厦门
平谷区品牌软件开发售后保障
张家界胖韭网络技术有限公司
数据库安全管理 大数据