依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 112|回复: 0

深入探讨jsonobject遍历

[复制链接] 主动推送

5449

主题

5496

帖子

6837

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6837
发表于 2024-1-10 13:53:15 | 显示全部楼层 |阅读模式
深入探讨jsonobject遍历一、从jsonobject遍历取值
在使用jsonobject的过程中,我们最常见的就是需要从jsonobject中获取某个key对应的值。获取单个值的方法很简单,可以使用get方法。下面是一个例子:
  1. JSONObject jsonObj = new JSONObject("{"name":"Tom","age":25}");
  2. String name = jsonObj.getString("name");
  3. int age = jsonObj.getInt("age");
复制代码
在上面的例子中,我们先通过字符串创建了一个jsonobject,接着使用getString和getInt方法获取了name和age的值。
如果要遍历获取jsonobject中的所有key-value对,可以使用keySet和get方法,如下:
  1. JSONObject jsonObj = new JSONObject("{"name":"Tom","age":25}");
  2. for (String key : jsonObj.keySet()) {
  3.     Object value = jsonObj.get(key);
  4. }
复制代码
这样,我们就能够遍历出所有的key-value对,并对value进行进一步的操作。
二、jsonobject遍历键值对
除了可以通过keySet遍历所有的key-value对,我们还可以通过entrySet方法直接获取key-value对。这么做的好处是,可以在遍历的同时获取key和value,而不需要再通过get方法去获取value。下面是一个例子:
  1. JSONObject jsonObj = new JSONObject("{"name":"Tom","age":25}");
  2. for (Map.Entry entry : jsonObj.entrySet()) {
  3.     String key = entry.getKey();
  4.     Object value = entry.getValue();
  5. }
复制代码
这样,我们就可以直接获取key和value,并进行进一步的操作。
三、jsonobject遍历数组
jsonobject中也可以包含json数组,对于这种情况,我们需要使用getJSONArray方法获取jsonarray,并对其进行遍历。下面是一个例子:
  1. JSONObject jsonObj = new JSONObject("{"students":[{"name":"Tom","age":25},{"name":"Jack","age":24}]}");
  2. JSONArray jsonArray = jsonObj.getJSONArray("students");
  3. for (int i = 0; i < jsonArray.length(); i++) {
  4.     JSONObject student = jsonArray.getJSONObject(i);
  5.     String name = student.getString("name");
  6.     int age = student.getInt("age");
  7. }
复制代码
在上面的例子中,我们通过getJSONArray方法获取了students对应的jsonarray,接着对其进行了遍历,并获取了每个student的name和age。
四、jsonobject遍历方法
在jsonobject中,还有许多方法可以用来遍历或者获取jsonobject中的各种信息。下面是一些常用的方法:
  • has方法:用来判断是否包含某个key,如jsonObj.has("name");
  • isNull方法:用来判断某个key对应的value是否为null,如jsonObj.isNull("name");
  • remove方法:用来删除某个key-value对,如jsonObj.remove("name");
  • put方法:用来添加某个key-value对,如jsonObj.put("name", "Tom");
  • toString方法:用来将jsonobject转换为字符串,如jsonObj.toString()。
五、jsonobject遍历key
在遍历jsonobject的过程中,有时候我们可能只关心jsonobject中的key,而不关心value。这种情况下,我们可以使用keyIterator或者keys方法来遍历所有的key。下面是一个例子:
  1. JSONObject jsonObj = new JSONObject("{"name":"Tom","age":25}");
  2. Iterator keys = jsonObj.keys();
  3. while (keys.hasNext()) {
  4.     String key = keys.next();
  5. }
复制代码
这样,我们就可以遍历出所有的key,并进行进一步的操作。
六、jsonobject遍历多级
在jsonobject中,有可能出现多级嵌套的情况,也就是说jsonobject中的某些value又是一个jsonobject。处理这种情况,我们可以使用递归来遍历出所有的key-value对。下面是一个例子:
  1. private void traverse(JSONObject jsonObj) throws JSONException {
  2.     for (String key : jsonObj.keySet()) {
  3.         Object value = jsonObj.get(key);
  4.         if (value instanceof JSONObject) {
  5.             traverse((JSONObject) value);
  6.         } else if (value instanceof JSONArray) {
  7.             JSONArray jsonArray = (JSONArray) value;
  8.             for (int i = 0; i < jsonArray.length(); i++) {
  9.                 if (jsonArray.get(i) instanceof JSONObject) {
  10.                     traverse(jsonArray.getJSONObject(i));
  11.                 }
  12.             }
  13.         }
  14.     }
  15. }
复制代码
在上面的例子中,我们定义了一个traverse方法,用来遍历jsonobject中所有的key-value对。对于jsonobject类型的value,我们通过递归的方式来处理。
七、jsonobject转map对象
有时候我们可能需要将jsonobject转换为map对象,以便于在某些场合下进行使用。下面是一个例子:
  1. public Map jsonToMap(JSONObject jsonObj) throws JSONException {
  2.     Map map = new HashMap<>();
  3.     Iterator keys = jsonObj.keys();
  4.     while (keys.hasNext()) {
  5.         String key = keys.next();
  6.         Object value = jsonObj.get(key);
  7.         if (value instanceof JSONArray) {
  8.             value = jsonToList((JSONArray) value);
  9.         } else if (value instanceof JSONObject) {
  10.             value = jsonToMap((JSONObject) value);
  11.         }
  12.         map.put(key, value);
  13.     }
  14.     return map;
  15. }
复制代码
在上面的例子中,我们定义了一个jsonToMap方法,用来将jsonobject转换为map对象。对于jsonobject和jsonarray类型的value,我们分别通过递归的方式转换成map和list。
八、jsonobject转实体类
如果我们需要将jsonobject转换为Java实体类,我们可以使用Jackson或Gson等库来完成。下面是一个使用Gson的例子:
  1. public class Student {
  2.     private String name;
  3.     private int age;
  4.     // getter和setter方法
  5. }

  6. public Student jsonToStudent(JSONObject jsonObj) {
  7.     Gson gson = new GsonBuilder().create();
  8.     return gson.fromJson(jsonObj.toString(), Student.class);
  9. }
复制代码
在上面的例子中,我们定义了一个Student类和一个jsonToStudent方法。在方法中,我们使用Gson的fromJson方法将jsonobject转换为Student对象。
九、jsonobject类
最后,我们简单介绍一下jsonobject类的一些常用方法:
  • put方法:用来添加一个key-value对;
  • remove方法:用来删除某个key-value对;
  • opt方法:用来获取某个key对应的value,如果该key不存在,则返回null;
  • get方法:用来获取某个key对应的value,如果该key不存在,则抛出异常;
  • keySet方法:用来遍历所有的key;
  • entrySet方法:用来遍历所有的key-value对;
  • toString方法:用来将jsonobject转换为字符串。
十、jsonobject转换为string
如果我们需要将jsonobject转换为字符串,可以使用toString或者write方法。下面是一个例子:
  1. JSONObject jsonObj = new JSONObject("{"name":"Tom","age":25}");
  2. String jsonStr1 = jsonObj.toString();
  3. StringWriter writer = new StringWriter();
  4. jsonObj.write(writer);
  5. String jsonStr2 = writer.toString();
复制代码
在上面的例子中,我们先使用toString方法将jsonobject转换为字符串,接着使用write方法将jsonobject写入到一个writer中,并将writer转换为字符串。


扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-4-28 00:42

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表