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

时间:2017-09-14 22:52:40

标签: 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中使用splits和substrings,但是,这是最有效的方法吗?如果没有,我可以采取任何其他想法吗?我正在使用Java和Apache Commons Sling JSON库(没有更改/添加Java JSON库的选项!)

谢谢你的时间!

3 个答案:

答案 0 :(得分:2)

您可以使用lib com.google.gson.Gson来管理json文件。

答案 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 :(得分:1)

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