在字符串中查找JSON字符串

我正在寻找一种在字符串中查找JSON数据的方法。像wordpress短代码一样考虑它。我认为最好的方法是使用正则表达式。我不想解析JSON,只想找到所有发生的事情

在正则表达式中有没有一种方法可以使括号的数目匹配?目前,我在使用嵌套对象时遇到了这个问题

演示的快速示例:

这是一篇关于东西的有趣文章,
看看这个产品{“动作”:“产品”,“选项”:{…}。
还有更多的文本和另一个JSON字符串
{“行动”:“审查”,“选项”:{…}

因此,我想要两个JSON字符串。
谢谢

从给定文本中提取JSON字符串

因为您正在寻找一个简单的解决方案,所以可以使用下面的正则表达式,它利用递归来解决匹配括号集的问题。它递归地匹配{}之间的所有内容

尽管如此,您应该注意,这并不能保证适用于所有可能的情况。它仅用作快速JSON字符串提取方法

$pattern=”
/
\{#{字符
(?:#非捕获组
任何不是{或}的东西
|#或
(?R)#递归整个模式
)*#前一组零次或多次
\}#}字符
/x
';
preg_match_all($pattern,$text,$matches);
打印($matches[0]);

输出:

数组
(
[0]=>{quot;操作":"产品","选项":{…}
[1] =>{quot;操作":"审查","选项":{…}
)

Regex101演示版


验证JSON字符串

在PHP中,知道JSON字符串是否有效的唯一方法是应用JSON\u decode()。如果解析器理解JSON字符串并符合定义的标准,JSON\u decode()将创建JSON字符串的对象/数组表示形式

如果要过滤掉那些无效的JSON,则可以使用带有回调函数的array\u filter()

函数isValidJSON($string){
json_解码($string);
返回(json\u last\u error()==json\u error\u NONE);
}
$valid_jsons_arr=array_filter($matches[0],'isValidJSON');

在线演示

发表评论