正则表达式将字符串“to ”中的所有双引号替换为有效的json字符串


Regex to replace all double quotes in a string " to " to valid json string

我有一个无效的 json 字符串,例如 {"主题":"tv 60" new","body":"联系我了解详细信息"}。

我尝试使用 php preg_replace 来验证此 json 字符串,但失败了。

请帮助我创建一个正则表达式来替换" to/"。

提前谢谢。

假设 JSON 中的"{"、":"和","字符与双引号之间没有任何尾随空格,解决方案可能是这样的:

$sanitizedJsonString = preg_replace('/([^:,{])"([^:,}])/', "$1".''"'."$2", $yourMalformedJsonString);

它查找所有前面没有"{"、":"或",字符且后不跟":"、"、"或"}"字符的块引号,并用"''"字符替换它们。


希望它能解决您的问题,但请记住,在某些特殊情况下,此方法会失败:例如,如果在格式错误的 JSON 中,块引号中有一个单词,后跟一个逗号,如下所示:

{"subject":"tv 60" new","body":"contact "me", for detail"}

您仍将拥有无效的 JSON:

{"subject":"tv 60'" new","body":"contact '"me", for detail"}

如果你需要一个更可靠的解决方案,我同意Steve P.的观点,你必须实现一个脚本来解析你的字符串,并在需要时替换块引用。

$string =~ /(?!<['{:,])'"(?!'s*[:,'}]/''"/g  

此正则表达式查找任何不跟在 : a 或 { 后面且不后跟 : a 或 } 的 " ,并用 '' 字符引号。 这应该对你有用。

除非是正则表达式来验证键/值,否则使用正则表达式不是尝试验证给定 JSON 对象的好方法。

即使您尝试在插入时进行验证,正则表达式似乎也矫枉过正,相反,您可以使用各种辅助方法或简单地遍历原始字符串并在必要时替换。