0


JSONArray与JSONObject

目录

1. 需求

最近有个需求: 要接收某个接口的 JSON 数据,而这个JSON数据有可能是一个 JSON 对象,也有可能是一个 JSON数组。

"{'name','王五','age':10}"

"[{'name':'张三','age':12},{'name':'李四','age':11}]"

现在呢,我需要根据传递过来的 JSON 数据进行判断,如果是对象就调用 resolve1(),如果是数组就调用 resolve2()。

依赖:

  • 本文采用 fastjson 来处理 JSON 数据<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency>
  • 因为要处理 JSON 数组,所以要使用 JSONArray.parseArray

2. 测试

首先呢,要判断 JSON 数据是否是一个数组,那么我首先想到的是,我用 JSONArray.parseArray 会不会出现异常,如果出现了异常,那我 try-catch 一下,不是很简单就能实现了吗。

测试代码:

/**
 * @author chenjy
 * @description:
 * @date 2023/1/11
 */publicclassJSONTest{publicstaticvoidmain(String[] args){String jsonArr ="[{'name':'张三','age':12},{'name':'李四','age':11}]";String jsonObj ="{'name':'王五','age':10}";JSONArray jsonArray =JSONArray.parseArray(jsonArr);System.out.println(jsonArray);JSONArray jsonObject =JSONArray.parseArray(jsonObj);System.out.println(jsonObject);}}

控制台输出:

很显然,JSONArray.parseArray 转换 JSON 对象 的时候会抛出异常 com.alibaba.fastjson.JSONException,那么我们实现需求的思路就变得简单起来了。


兴趣使然,我再来看一下 JSONObject.parseObject 能不能转换 JSON 数组。

测试代码:

/**
 * @author chenjy
 * @description:
 * @date 2023/1/11
 */publicclassJSONTest{publicstaticvoidmain(String[] args){String jsonArr ="[{'name':'张三','age':12},{'name':'李四','age':11}]";String jsonObj ="{'name':'王五','age':10}";JSONObject jsonObject =JSONObject.parseObject(jsonObj);System.out.println(jsonObject);JSONObject jsonArray =JSONObject.parseObject(jsonArr);System.out.println(jsonArray);}}

控制台输出:

果然,也会抛出异常 com.alibaba.fastjson.JSONException

3. 实现需求

好的,经过上面的测试,我们的需求实现思路:在 try 中调用 resolve2,在 catch 中调用 resolve1

/**
 * @author chenjy
 * @description:
 * @date 2023/1/11
 */publicclassJSONTest{publicstaticvoidmain(String[] args){String jsonArr ="[{'name':'张三','age':12},{'name':'李四','age':11}]";String jsonObj ="{'name':'王五','age':10}";System.out.println("======测试 JSON 数组======");getParam(jsonArr);System.out.println("======测试 JSON 对象======");getParam(jsonObj);}publicstaticvoidgetParam(String str){try{JSONArray jsonArray =JSONArray.parseArray(str);resolve2(jsonArray);}catch(JSONException e){JSONObject jsonObject =JSONObject.parseObject(str);resolve1(jsonObject);}}/*
        处理对象
     */publicstaticvoidresolve1(JSONObject obj){System.out.println("姓名:"+ obj.getString("name")+"年龄:"+ obj.get("age"));}/*
        处理数组
     */publicstaticvoidresolve2(JSONArray array){for(Object obj : array){JSONObject jObj =(JSONObject) JSON.toJSON(obj);System.out.println("姓名:"+ jObj.getString("name")+"年龄:"+ jObj.get("age"));}}}

4. 相关操作

1. 将JSONObject装入JSONArray

我来形象地说明一下两者的关系

  • JSONObject 就相当于一个 Map,往 JSONObject 中新增键值对的方法: *put(key, value),删除键值对的方法:remove(key)*。
  • JSONArray 相当于一个 *List<Map>*,往 JSONObject 中新增元素的方法: *add(JSONObject),删除键值对的方法:remove(object)*。

2. JSONArray与String的相互转换

  • StringJSONArrayJSONArray.parseArray(String str)
  • JSONArrayStringjsonArray.toString()jsonArray.toJSONString()String.valueOf(jsonArray)

顺便说一下 JSONObjectString 之间的相互转换

  • StringJSONObjectJSONObject.parseObject(String str)
  • JSONObjectStringjsonObject.toJSONString()jsonObject.toString()String.valueOf(jsonObject)
String jsonArr ="[{'name':'张三','age':12},{'name':'李四','age':11}]";String jsonObj ="{'name':'王五','age':10}";JSONArray jsonArray =JSONArray.parseArray(jsonArr);System.out.println(
                jsonArray.toJSONString()instanceofString&& jsonArray.toString()instanceofString&&String.valueOf(jsonArray)instanceofString);JSONObject jsonObject =JSONObject.parseObject(jsonObj);System.out.println(
                jsonObject.toJSONString()instanceofString&& jsonObject.toString()instanceofString&&String.valueOf(jsonObject)instanceofString);

3. 注意:toString与JSONObject.toJSONString的区别

publicclassJSONTest{publicstaticvoidmain(String[] args){Tom tom =newTom("张三",18);System.out.println(tom.toString());JSONObject jsonObject =JSONObject.parseObject(JSONObject.toJSONString(tom));System.out.println(jsonObject);
        jsonObject.put("sex",1);System.out.println(jsonObject.toJSONString());}}@Data@AllArgsConstructorclassTom{String name;Integer age;}

标签: json java restful

本文转载自: https://blog.csdn.net/m0_54355172/article/details/128641242
版权归原作者 364.99° 所有, 如有侵权,请联系我们删除。

“JSONArray与JSONObject”的评论:

还没有评论