我有这么长的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
?
答案 0 :(得分:2)
就像我在评论中所说的那样, 我通常使用JSON-Simple。 一个很棒的教程,decoding。
看起来有点像:
JSONObject obj = JSONValue.parse(jsondata);
obj.get("test");
PS。 我确实在你的json数据中看到了一些错误,利用jsonlint验证你的json是否格式正确......
答案 1 :(得分:0)
这将获取第一个{
和最后一个}
之间的所有内容:
String guts = jsondata.replaceAll("(?s)^.*?\\{(.*?flags : null[^}]*).*$", "$1");
正则表达式会在第一个{
到您的信号量文本和所有非}
个字符之后捕获所有内容。