2017-09-14 59 views
0

我有一个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字符串和相应的大括号中删除更多和对象标签。一种可以做到的方式显然就是在Java中使用分割和子字符串,但是,这是最有效的方法吗?如果没有,关于我可以如何处理这个问题的任何其他想法?我正在使用Java和Apache Commons Sling JSON库(无法更改/添加Java JSON库!)

感谢您的时间!

+0

为什么不使用JSON库? – Oleg

回答

1

不幸的是,原生JSON支持was delayed past Java 9

要么子&替换为你写的,对于更复杂的情况下,如删除整个“更多”目标,实现自己的解析器,例如:通过计算括号

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'}} 
1

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

2

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

相关问题