我有一个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库的选项!)
谢谢你的时间!
答案 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)
简单方法:我们可以通过子串或替换字符串的方法来实现。如果需要,我们可以使用正则表达式更准确。