2015-10-12 59 views
1

我有一个JSON字符串无效像{“主题”:“电视60”新”,‘体’:‘和我联系查看详细’} 。正则表达式替换所有双引号中的字符串“到”,以有效的JSON字符串

,我尝试使用PHP的preg_replace来有效此JSON字符串,但失败。

请帮我创建一个正则表达式来取代“到/”。

在此先感谢。

+0

我没有在你的JSON中看到'/ ...' –

+0

这个网站对于正则表达式来说是一个很好的资源:http://www.regexr.com/ – Sevyns

+0

正则表达式不够聪明,无法知道有效的json句法。 – hjpotter92

回答

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

此正则表达式查找任何“不符合:a或a(并且不是跟随:a或a)并且用\字符引用它。这应该适合你。

0

除非你正则表达式来验证在插入到JSON对象之前键/值,使用正则表达式是不是尝试验证一个给定的JSON对象的好方法。

即使你正试图在插入时进行验证,它似乎正则表达式是大材小用,而是你可以使用各种辅助方法或只需通过原始字符串进行迭代,并更换必要的时候。

2

假设“{”,“:”和“”在你的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.,你必须实现一个脚本来解析你的字符串,并在需要时替换blockquotes。