gpt4 book ai didi

java - 正则表达式查找部分输入是否是有效的 JSON

转载 作者:行者123 更新时间:2023-12-02 11:15:48 25 4
gpt4 key购买 nike

我有一个场景,我需要验证部分输入(见下文)是否是有效的 JSON?我已经提到了这个answer识别给定字符串是否是有效的 JSON。

输入示例:

 { 
"JSON": [{
"foo":"bar",
"details": {
"name":"bar",
"id":"bar",

到目前为止我已经尝试过:

/ (?(DEFINE)
(?<number> -? (?= [1-9]|0(?!\d) ) \d+ (\.\d+)? ([eE] [+-]? \d+)? )
(?<boolean> true | false | null )
(?<string> " ([^"\n\r\t\\\\]* | \\\\ ["\\\\bfnrt\/] | \\\\ u [0-9a-f]{4} )* " )
(?<array> \[ (?: (?&json) (?: , (?&json) )* )? \s* \]{0,1} )
(?<pair> \s* (?&string) \s* : (?&json) )
(?<object> \{ (?: (?&pair) (?: , (?&pair) )* )? \s* \}{0,1} )
(?<json> \s* (?: (?&number) | (?&boolean) | (?&string) | (?&array) | (?&object) ) \s* )
) \A (?&json)\,{0,1} \Z /six

我将数组和对象的关闭设置为可选(允许零次或一次)。但在某些情况下,这会失败,例如,当您打开一个对象而不关闭另一个对象时(如下所示),正则表达式仍然会找到匹配项。

无效,但仍然匹配:

 { 
"JSON": [{
"foo":"bar",
"details": {
"name":"bar",
"id":"bar",{

如何验证部分 JSON 输入?

编辑:

正如 @ntahdh 在评论中提到的,此正则表达式无法使用 java.util.regex 工作。所以现在我需要一个无需递归即可工作的正则表达式

最佳答案

这并不是对您问题的完全答案,如果允许的字符数足够的话,这可能是评论的形式。

JSON 不是常规语言,因此不能仅由正则表达式引擎识别(如果您使用 Python 编程,regex 包提供的扩展可能可以完成您的任务,但我说的大体上是正确的)。

如果解析器生成器不适用于您的首选语言,您可以考虑创建一个简单的递归下降解析器。您已经定义的正则表达式将非常有助于您创建将作为该解析器的输入的标记。当然,您会期望会发生解析错误——但它应该发生在作为文件结束标记的输入标记上。在扫描文件结束标记之前发生的解析错误表明您没有有效 JSON 的前缀。如果您正在使用自下而上的移位归约解析器(例如使用 YACC 生成的解析器),那么这将是文件结尾标记以外的其他内容上的移位错误。

关于java - 正则表达式查找部分输入是否是有效的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60113319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com