JSONObject - 用最通俗的讲解,教你玩转 JSON 数据的剖析和修改 ...

打印 上一主题 下一主题

主题 807|帖子 807|积分 2421

目录
一、JSONObject
1.1、为什么要使用他?
1.2、应用
1.2.1、依靠
1.2.2、JSON 数据示例
1.2.3、JSON 数据的构建
1.2.4、JSON 数据的剖析


一、JSONObject


1.1、为什么要使用他?

在还没有接触过这个东西的时间,一直是通过 ObjectMapper 进行 JSON 的序列化和反序列化,尤其是将 JSON 数据进行剖析还需要提供一个具体的类...  就算不提供具体的类,使用 JsonNode 读取数据,涉及到修改还要强转 ObjectNode 就很贫苦~ 
而且假如要构造一个 JSON 格式的数据,可能开始想到的就是通过 HashMap ,但是一但要构造的 JSON 数据稍微复杂一点,就要嵌套不少,代码的简便、可读性大大降低.
然而在实习的时间,作为后端开发,有需要和这些数据常常打交道,以是就学到了一种处置处罚 JSON 数据的神器——JSONObject
接下俩我们直接通过实战来看看为什么是神器~
1.2、应用

1.2.1、依靠

  1.         <dependency>
  2.             <groupId>org.json</groupId>
  3.             <artifactId>json</artifactId>
  4.             <version>20210307</version> <!-- 使用适当的版本号 -->
  5.         </dependency>
复制代码
  所在包:import org.json.JSONObject;
  1.2.2、JSON 数据示例

比方有如下 JSON 数据
  1.     private static final String msg = """
  2.             {
  3.                 "file": {
  4.                     "user": {
  5.                         "name": "cyk",
  6.                         "age": 20,
  7.                         "likes": ["弹钢琴", "敲代码", "唱歌", "亲亲"]
  8.                     },
  9.                     "admin": {
  10.                         "name": "lyj"
  11.                     }
  12.                 }
  13.             }
  14.             """;
复制代码
  Ps:likes 这里是一个 JSON 数组,因此需要通过 JSONArray 来构造. 
  
1.2.3、JSON 数据的构建

a)重要方法就是 put(),返回值是一个 JSONObject,参数可以如下:

b)解读: JSONObject 对象就像是一个容器(现实上底层也是 Map),可以简单的想象成一对大括号 "{ }",这个对象有 put 方法,方法的参数就是一个键值对,返回值就是 JSONObject 本身.  现实上 put 就是往这对大括号里面装东西.  假如 key 存在就覆盖,key 不存在就添加.
明白上述,就不难构造啦~
  1.         //1.构建最外层大括号
  2.         JSONObject parent = new JSONObject();
  3.         //2.key 就是 "file", value 又是一个大的 json 数据(可以简单理解为一对大括号算一个 JSON 数据)
  4.         JSONObject fileJO = new JSONObject();
  5.         //3.再往里有两个 key,分别是 user 和 admin, value 又是 json 数据
  6.         JSONObject userJO = new JSONObject();
  7.         JSONObject adminJO = new JSONObject();
  8.         //4.注意 user 中有一个 json 数组
  9.         JSONArray array = new JSONArray();
  10.         //5.接下来就是简单的赋值啦
  11.         array.put("弹钢琴");
  12.         array.put("敲代码");
  13.         array.put("唱歌");
  14.         array.put("和女朋友玩游戏");
  15.         userJO.put("name", "cyk");
  16.         userJO.put("age", 20);
  17.         userJO.put("likes", array);
  18.         adminJO.put("name", "lyj");
  19.         fileJO.put("user", userJO);
  20.         fileJO.put("admin", adminJO);
  21.         parent.put("file", fileJO);
复制代码
当你把 JSONObject 就想象成一个大括号,每次 put 就是在往里面放元素,就会发现,也可以写出如下优雅的代码~
  1.         JSONObject parent = new JSONObject().put("file",
  2.                 new JSONObject()
  3.                         .put("user", new JSONObject()
  4.                                 .put("name", "cyk")
  5.                                 .put("age", 20)
  6.                                 .put("likes", new JSONArray().put("弹钢琴").put("敲代码").put("唱歌").put("和女朋友玩游戏")))
  7.                         .put("admin", new JSONObject().put("name", "lyj")));
复制代码
c)输出如下:


1.2.4、JSON 数据的剖析

a)重要方法如下:


  • get() :参数就是 json 中的 key,是 String 类型; 返回值就是 key 对应的 value,返回值是 Object.
  • getJSONObject():参数是 json 中的 key,是 String类型;返回值 key 对应的 value,类型是 JSONObject.
  • getJSONArray():参数是 json 中的 key ,是 String 类型;返回值是 key 对应 json 数组,类型是 JSONArray. 
b)解读:上述三个方法都可以明白为,每次 get 现实上都是将 key+{} 和 value 之间 的一次剥离,使你拿到对应的 value,只是返回值类型差别而已.
  1.         //1.将 json 数据放入 parent 中
  2.         JSONObject parent = new JSONObject(msg); //这里也可以放 map
  3.         //这里列举几种情况
  4.         //a) 获取 file 的 value 值
  5.         JSONObject file = parent.getJSONObject("file");//这里不建议直接用 get (强转 toString() 会有奇怪的报错),因为获取到的值实际上还是一个 JSON 格式数据
  6.         System.out.println(file.toString());
  7.         //b) 获取 user 下的 name 对应的 value 值
  8.         String name = (String) parent
  9.                 .getJSONObject("file") //返回的是 JSONObject 对象,因此还可以继续往里读取
  10.                 .getJSONObject("user")
  11.                 .get("name");   //这里就不能再使用 getJSONObject 获取 JSONObject 都对象了,因为 name 后面没有大括号可以解析了
  12.         System.out.println("name: " + name);
  13.         //c) 获取 user 下的 likes 数组
  14.         String likes = String.valueOf(parent
  15.                 .getJSONObject("file")
  16.                 .getJSONObject("user")
  17.                 .getJSONArray("likes")); // 注意这里是一个 JSONArray 数组
  18.         System.out.println("likes: " + likes);
复制代码
c)输出如下:



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!

标签云

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