JSONArray与JSONObject[通俗易懂]

JSONArray与JSONObject[通俗易懂]随笔_jsonarray转为jsonobject

目录

  • 1. 需求
  • 2. 测试
  • 3. 实现需求
  • 4. 相关操作
    • 1. 将JSONObject装入JSONArray
    • 2. 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 数据

            <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 */
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与JSONObject[通俗易懂]

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


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

测试代码:

/** * @author chenjy * @description: * @date 2023/1/11 */
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);
    }
}

控制台输出:
JSONArray与JSONObject[通俗易懂]

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

3. 实现需求

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

/** * @author chenjy * @description: * @date 2023/1/11 */
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"));
        }
    }
}

JSONArray与JSONObject[通俗易懂]

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() 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
@AllArgsConstructor
class Tom { 
   
    String name;
    Integer age;
}

JSONArray与JSONObject[通俗易懂]今天的文章JSONArray与JSONObject[通俗易懂]分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58055.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注