有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是编辑JSON字符串最有效的方法

我有一个JSON字符串,只能访问,不能创建。现在,JSON的格式如下所示:

{ "ID": "1", "value": "{'ID': '1', 'more': {'Key': 'Value', 'Object': {'Akey': 'Avalue'}}}" }

我想编辑这个JSON字符串,将其放入另一个类似以下格式的函数中:

{ "ID": "1", "value": "{'ID': '1', 'Key': 'Value', 'Akey': 'Avalue'}" }

基本上,只需从JSON字符串和相应的花括号中删除More和Object标记。其中一种方法显然是在Java中使用拆分和子字符串,然而,这是最有效的方法吗?如果没有,我还有什么其他的想法吗?我正在使用Java和Apache Commons Sling JSON库(没有更改/添加Java JSON库的选项!)

谢谢你抽出时间


共 (3) 个答案

  1. # 1 楼答案

    不幸的是,本机JSON支持was delayed past Java 9

    子字符串和;如您所写,对于更复杂的情况,如删除整个“more”对象,请实现您自己的解析器,例如:

        String value = "{'ID': '1', 'more': {'Key': 'Value', 'Object': {'Akey': 'Avalue'}}}";
        String delimiter = ", 'more'"; // pay attention to the comma, you can fix it by splitting by comma
        int start = value.indexOf(delimiter);
        System.out.println("start = " + start);
        Stack<Character> stack = new Stack<>();
        String substring = value.substring(start + delimiter.length(), value.length());
        System.out.println("substring = " + substring);
        char[] chars = substring.toCharArray();
        int end = 0;
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if (c == '{')
                stack.push('{');
            if (c == '}') {
                stack.pop();
                if (stack.isEmpty()) {
                    end = i;
                    break;
                }
            }
        }
        System.out.println("end = " + end);
        String substring2 = value.substring(start, start + end + delimiter.length());
        System.out.println(substring2);
        System.out.println(value.replace(substring2, ""));
    

    通过计算括号,输出

    start = 10
    substring = : {'Key': 'Value', 'Object': {'Akey': 'Avalue'}}}
    end = 47
    , 'more': {'Key': 'Value', 'Object': {'Akey': 'Avalue'}
    {'ID': '1'}}
    
  2. # 2 楼答案

    可以使用库com.google.gson.Gson来管理json文件

  3. # 3 楼答案

    简单的方法:我们可以通过子字符串或替换字符串的方法来实现。如果需要,我们可以使用正则表达式来获得更精确的结果