Java 从非结构化字符串中提取JSON字符串
我有一个非结构化字符串,我想使用正则表达式从中提取以下带有“restaurant”标记的JSON字符串。数据仅用于示例,但格式和“餐厅”标记是正确的Java 从非结构化字符串中提取JSON字符串,java,regex,Java,Regex,我有一个非结构化字符串,我想使用正则表达式从中提取以下带有“restaurant”标记的JSON字符串。数据仅用于示例,但格式和“餐厅”标记是正确的 { "restaurant": { "id": "abcd-efgh-ijkl", "created_at": "2020-12-31", "cashier_payments"
{
"restaurant": {
"id": "abcd-efgh-ijkl",
"created_at": "2020-12-31",
"cashier_payments": []
}
}
我提出了正则表达式字符串findMe=“\'restaurant\”:{(\\n.*?+}”代码>,但是它会占用所有数据,直到最后一个}
如何更正正则表达式
按照要求,我使用Jsoup获取非结构化字符串:
String htmlString = contentBuilder.toString();
Document doc = Jsoup.parse(htmlString);
Elements elements = doc.getElementsByTag("script");
for (Element element :elements ){
for (DataNode node : element.dataNodes()) {
String s = node.getWholeData();
if(s.contains("\"restaurant\":")){
System.out.println(s);
}
}
System.out.println("-------------------");
}
因此,我想从字符串s中进行解析。如果您要提取的条目不包含对象(否则,您需要一个合适的JSON解析器),则可以使用以下正则表达式:“restaurant”:\s*\{[^}]*\}
编辑:看起来value对象确实包含其他对象,所以我建议使用JSON库,比如Jackson。正则表达式中的
匹配任何字符。是否有可以排除的字符以获得所需的结果?你看过贪婪匹配和非贪婪匹配吗?不,我需要模式中提到的字符串中的所有内容。所以在“餐厅”标签上方“{”直到结束“}”。我最近两个小时试图学习正则表达式,但这不起作用。你能举一个“非结构化字符串”的例子吗?灰色框中的文本是结构良好的JSON,因此不能称之为“非结构化”。示例字符串位于大型HTML字符串中,我指的是非结构化字符串。但这可能不是正确的措辞。我更新了问题。您可以尝试正则表达式“\”restaurant\”:\\{[^}]*\\}”
,这在您的示例中适用,但它仍然是一个错误的正则表达式,因为它无法处理嵌套对象或字符串值中的大括号字符。正则表达式对于这项工作来说是错误的工具。由于数据是结构良好的JSON,请使用JSON解析器。不知道如何感谢您。每次遇到正则表达式时,我都感到非常不安。非常感谢你。我会很快接受你的回答。@ChakladerAsfakArefe没问题!但是在使用正则表达式之前,请考虑使用一个功能齐全的JSON解析器,因为如果有一天您在试图提取的对象中得到一个对象,那么这段代码就会中断,否则它将是一个更干净、更灵活的解决方案。好的,我有一个问题。我有“pos_用户”:[{},{}]
数据在“restaurant”:{}
的花括号内,您的正则表达式结束于“pos_用户”:[{}
并且没有完成整个“restaurant”:{}
data。所以我不得不说这并没有达到预期效果。Sorry@ChakladerAsfakArefe正如我和其他评论者所提到的,如果你在任何地方都有一个右括号,“restaurant”:{/*here*/}
,此方法将失败。如果您的数据比OP中的数据更复杂,则需要JSON解析器,例如Jackson库提供的解析器。