【发布时间】:2013-07-22 11:28:49
【问题描述】:
我正在实现某种解析器,我需要定位和反序列化 嵌入到其他半结构化数据中的 json 对象。我使用了正则表达式:
\\{\\s*title.*?\\}
定位对象
{title:'Title'}
但它不适用于嵌套对象,因为表达式只匹配第一个找到的右花括号。对于
{title:'Title',{data:'Data'}}
匹配
{title:'Title',{data:'Data'}
所以字符串对于反序列化变得无效。 我知道有一个贪婪的业务正在考虑,但我不熟悉正则表达式。您能否帮我扩展表达式以使用所有可用的右大括号。
更新:
明确地说,这是从半结构化数据(如嵌入了 JSON 的 HTML+JS)中提取 JSON 数据的尝试。我正在使用 GSon JAVA lib 来实际解析提取的 JSON。
【问题讨论】:
-
当心“OMG,不要使用正则表达式,它是邪恶的!!”
-
.. 但说真的 - 为什么?手头的数据是什么,你需要用它来实现什么
-
@ViktorStolbin 有预制的 JSON 解析库。此外,由于 JSON 不是正则语言,因此无法用正则表达式正确解析(就像 HTML 一样)。
-
你真的不能用正则表达式轻松做到这一点。 JSON 解析器的例子很多。如果可能的话,只要拿起一个,你会好很多。
-
@ViktorStolbin:我知道您并没有重新发明 JSON 库。我在这里想说的是,这是一个由两部分组成的活动: 1. 从半结构化数据中提取 JSON 字符串 2. 将有效的 JSON 字符串片段传递给 GSON 以将其解析为 Java 结构。首先,正则表达式是不够的,因为它不能执行“大括号匹配”,因此建议。