我有一个无效的 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 对象的好方法。
即使您尝试在插入时进行验证,正则表达式似乎也矫枉过正,相反,您可以使用各种辅助方法或简单地遍历原始字符串并在必要时替换。