Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从非结构化字符串中提取JSON字符串_Java_Regex - Fatal编程技术网

Java 从非结构化字符串中提取JSON字符串

Java 从非结构化字符串中提取JSON字符串,java,regex,Java,Regex,我有一个非结构化字符串,我想使用正则表达式从中提取以下带有“restaurant”标记的JSON字符串。数据仅用于示例,但格式和“餐厅”标记是正确的 { "restaurant": { "id": "abcd-efgh-ijkl", "created_at": "2020-12-31", "cashier_payments"

我有一个非结构化字符串,我想使用正则表达式从中提取以下带有“restaurant”标记的JSON字符串。数据仅用于示例,但格式和“餐厅”标记是正确的

{
    "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库提供的解析器。