【发布时间】:2015-07-22 05:14:06
【问题描述】:
我有这个很长的 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?
【问题讨论】:
-
不幸的是,您无法使用正则表达式处理 Java 中的嵌套括号。使用 json 解析器。
-
我通常使用JSON-Simple。一个很棒的教程,decoding。
-
另外,这不是有效的 Java 代码,如果是,jsondata 将是无效的 JSON。
-
json 不是正则表达式可解析的,你需要一个有状态的解析器。