返回顶部
首页 > 资讯 > 后端开发 > JAVA >JSONArray与JSONObject
  • 898
分享到

JSONArray与JSONObject

jsonjavarestful 2023-08-16 19:08:53 898人浏览 独家记忆
摘要

目录 1. 需求2. 测试3. 实现需求4. 相关操作1. 将JSONObject装入JSONArray2. JSONArray与String的相互转换3. 注意:toString与JSONObject.toJSONString的区

1. 需求

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

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

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

依赖:

  • 本文采用 fastjson 来处理 JSON 数据

                        com.alibaba            fastjson            1.2.83        
  • 因为要处理 JSON 数组,所以要使用 JSONArray.parseArray

2. 测试

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

测试代码:

public class JSONTest {    public static void main(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 数组。

测试代码:

public class JSONTest {    public static void main(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

public class JSONTest {    public static void main(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);    }    public static void getParam(String str) {        try {            JSONArray jsonArray = JSONArray.parseArray(str);            resolve2(jsonArray);        } catch (JSONException e) {            JSONObject jsonObject = JSONObject.parseObject(str);            resolve1(jsonObject);        }    }        public static void resolve1(JSONObject obj) {        System.out.println("姓名:" + obj.getString("name") + "年龄:" + obj.get("age"));    }        public static void resolve2(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,往 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() instanceof String                && jsonArray.toString() instanceof String                && String.valueOf(jsonArray) instanceof String        );        JSONObject jsonObject = JSONObject.parseObject(jsonObj);        System.out.println(                jsonObject.toJSONString() instanceof String                && jsonObject.toString() instanceof String                && String.valueOf(jsonObject) instanceof String        );

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

public class JSONTest {    public static void main(String[] args) {        Tom tom = new Tom("张三", 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@AllArgsConstructorclass Tom {    String name;    Integer age;}

来源地址:https://blog.csdn.net/m0_54355172/article/details/128641242

--结束END--

本文标题: JSONArray与JSONObject

本文链接: https://www.lsjlt.com/news/372036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作