我有一个很长的 JSON 字符串。我想过滤它并只获取第一个括号之间的数据。问题是,我有许多其他括号,因此我的正则表达式模式无法正常工作。
这是 JSON 字符串:
String jsondata = "["
+"{"
+ "test: 63453645"
+"date: 2016-07-17"
"{"
+ "id:534534"
+"}"
+ "blank : null"
+ "flags : null"
+ "}"
+"{"
+ "test: 543564236"
+"date: 2014-07-17"
+"{"
+ "id:6532465"
+"}"
+ "blank : null"
+ "flags : null"
+ "}"
+"]";
pattern = "\\{[^{}]*\\}";
pr = Pattern.compile(pattern);
math = pr.matcher(jsondata);
if (math.find()) {
System.out.println(math.group());
}
else
System.out.println("nomatch");
我的模式的问题是它只打印到 id:
之后的第一个 }
,但我希望它在最后一个 }
位于 flags: null 之后。
我只想打印第一个匹配项,即不是后面的字符串,因为它们也以相同的字符开始和结束,这就是为什么我有一个 if 语句而不是 while 循环。
有什么建议吗?谢谢!
具有多个括号的正则表达式似乎是一项非常困难的任务。我可以匹配最后一个字符串吗?从 {
开始到 flags : null
?
最佳答案
正如我在评论中所说, 我通常使用 JSON-Simple 。 很棒的教程,decoding .
看起来有点像:
JSONObject obj = JSONValue.parse(jsondata);
obj.get("test");
PS。
我确实在您的 json 数据中看到了一些错误,请使用 jsonlint验证您的 json 格式是否正确...
关于java - 匹配多个括号之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30172086/