23.JSONObject对于map重复的key对象报错问题处理

JSON对于map重复的Key,转换过程中会报错!具体代码如下,附带报错信息

package com.fjnx.history.collection;

import com.alibaba.fastjson.JSONObject;

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: xu.debu
 * Date: 2020-09-10
 * Time: 19:50
 */
public class CollectionTest {

    private static final String flag = "\n";

    public static void main(String[] args) {
        CollectionTest t = new CollectionTest();
        t.testOutput();
        t.testJsonError();
        t.testJsonErrorMethod();
    }

    /**
     * 测试数据展示格式
     */
    public void testOutput() {
        /**
         * 集合及数组以及map,JsonOBjec控制台输出数据格式
         */

        int[] array = new int[2];
        array[0] = 1;
        array[1] = 2;

        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);

        Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);

        Map<String, Object> map = new HashMap<>();
        map.put("1", 1);
        map.put("2", 2);

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("1", 1);
        jsonObject.put("2", 2);
        System.out.println(">>>>>>>array " + JSONObject.toJSON(array));
        System.out.println(">>>>>>>list " + JSONObject.toJSON(list));
        System.out.println(">>>>>>>set " + JSONObject.toJSON(set));
        System.out.println(">>>>>>>map " + JSONObject.toJSON(map));
        System.out.println(">>>>>>>jsonObject " + jsonObject.toJSONString());
    }

    /**
     * 测试JsonObject对于对象重复的报错信息
     */
    public void testJsonError() {
        JSONObject jsonObject=new JSONObject();
        List<Object> list = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        Map<String, Object> mapSub1 = new HashMap<>();
        mapSub1.put("1",1);
        Map<String, Object> mapSub2 = new HashMap<>();
        mapSub2.put("1", 2);
        map.put("1", mapSub1);
        list.add(map);
        map.put("1", mapSub2);
        list.add(map);
        jsonObject.put("jsonObject",list);
        System.out.println(">>>>>>>>>JsonData" + JSONObject.toJSON(list));
        System.out.println(">>>>>>>>>JsonError" + jsonObject.toJSONString());
    }
    /**
     * 测试JsonObject对于对象重复的报错信息,以下处理方式可以避免报错,
     * 就是key相同的map重新赋值之前,重新New个map对象
     */
    public void testJsonErrorMethod() {
        JSONObject jsonObject=new JSONObject();
        List<Object> list = new ArrayList<>();
        Map<String, Object> map =null;
        Map<String, Object> mapSub1 = new HashMap<>();
        mapSub1.put("1",1);
        Map<String, Object> mapSub2 = new HashMap<>();
        mapSub2.put("1", 2);
        map=new HashMap<>();
        map.put("1", mapSub1);
        list.add(map);
        map=new HashMap<>();
        map.put("1", mapSub2);
        list.add(map);
        jsonObject.put("jsonObject",list);
        System.out.println(">>>>>>>>>JsonData" + JSONObject.toJSON(list));
        System.out.println(">>>>>>>>>testJsonErrorMethod" + jsonObject.toJSONString());
    }
}

>>>>>>>map {"1":1,"2":2}
>>>>>>>jsonObject {"1":1,"2":2}
>>>>>>>>>JsonData[{"1":{"1":2}},{"1":{"1":2}}]
>>>>>>>>>JsonError{"jsonObject":[{"1":{"1":2}},{"$ref":"$.jsonObject[0]"}]}
>>>>>>>>>JsonData[{"1":{"1":1}},{"1":{"1":2}}]
>>>>>>>>>testJsonErrorMethod{"jsonObject":[{"1":{"1":1}},{"1":{"1":2}}]}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想使用 JSON 解析功能,可以使用 Java 自带的 `org.json` 包,无需额外导入其他第三方包。 以下是使用 `org.json` 包解析 JSON 的示例代码: ``` import org.json.JSONObject; public class ParseJsonString { /* * @param jsonStr 未处理json串 * @param keyWords 要获取的单元的父级key * @return result 处理完成的JSON */ public static String parseJsonString(String jsonStr, String keyWords) { String result = ""; try { JSONObject obj = new JSONObject(jsonStr); String objStr = obj.toString(); String str = objStr.replace("\\", ""); // 去除反斜杠 int index = str.indexOf(keyWords); result = str.substring(0, index + keyWords.length() + 2) + "" + str.substring(index + keyWords.length() + 3, str.length() - 2) + "}"; } catch (Exception e) { e.printStackTrace(); } return result; } public static void main(String[] args) { String jsonStr = "{\"name\":\"张三\",\"age\":18,\"address\":{\"province\":\"江苏省\",\"city\":\"南京市\",\"district\":\"鼓楼区\"}}"; String keyWords = "address"; String result = parseJsonString(jsonStr, keyWords); System.out.println(result); } } ``` 如果您仍然想使用 `com.alibaba.fastjson.JSONObject` 类,可以按照以下步骤进行操作: 1. 下载 fastjson jar 包,可以在 [fastjson Github](https://github.com/alibaba/fastjson) 上找到最新版的 jar 包。 2. 将 fastjson jar 包添加到项目的 classpath 中。具体方法可以参考 [Eclipse 添加 jar 包教程](https://www.runoob.com/w3cnote/eclipse-tutorial-add-jar-library.html) 或者 [IntelliJ IDEA 添加 jar 包教程](https://blog.csdn.net/chufei520/article/details/80770750)。 3. 在 Java 文件中添加导入语句 `import com.alibaba.fastjson.JSONObject;`。 需要注意的是,使用第三方包存在一些风险,需要确保下载的包是可靠的,并且需要遵循相应的使用协议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值