我试图在java中编写一个replaceAll,可以将json替换为数组而不是对象,这就是我的意思的一个例子:
test:[{\"asdf\":\"asasdd\"}]
我的目标是将测试对象中的所有}替换为数组但不影响任何其他}
(我正在使用的json是有效的(与下面的json不同)但是我一直在用下面的字符串进行测试,因为我希望它会有相同的结果并且它会短得多)
String test = "[asdfasdf}test:{\"asdf\":\"asasdd\"}.sdfasdfsadfsdf, test:{\"asdf\":\"asasdd\"}sdfsdf } ";
//期望的结果
String test = "[asdfasdf}test:[{\"asdf\":\"asasdd\"}].sdfasdfsadfsdf, test:[{\"asdf\":\"asasdd\"}]sdfsdf } ";
System.out.println(test.replaceAll("(?<=[test:{])}", "}]")); //
所以作为旁注,我想指出为什么我发现这个问题很重要,因为一个糟糕的供应商将json作为一个对象,而不是一个数组,如果它没有超过一个结果。因此,它打破了我的json类解析器
答案 0 :(得分:1)
这应该有效:
(?<=\btest:){[^}]*}
这是DEMO
示例代码:
String input = "[asdfasdf}test:{\"asdf\":\"asasdd\"}.sdfasdfsadfsdf, test:{\"asdf\":\"asasdd\"}sdfsdf } ";
System.out.println(input.replaceAll("(?<=\\btest:)\\{[^}]*\\}","[$0]"));
模式说明:
(?<= look behind to see if there is:
\b the word boundary
test: 'test:'
) end of look-behind
{ '{'
[^}]* any character except: '}' (0 or more times)
} '}'