2012-09-24 122 views
1

我试图用json_decode解码包含用逗号分隔的词加上双引号的单词的JSON:json_decode双引号和逗号返回NULL

{"wordsFont":"Times New Roman","nameList":["Overflow ,","Stack ""]} 

json_decode失败,所以我试图格式化字符串逃过报价中包含的功能:

function fixDoubleQuotedJSON($broken_json) 
{ 
    return str_replace('""','\""',$broken_json); 
} 

但它只会在逗号和双引号是在一个单词的末尾的情况。结果:

{"wordsFont":"Times New Roman","nameList":["Overflow \,","Stack \""]} 

解码正确,但我需要找到一种方法来做到这一点的任何位置的双引号和逗号。有什么建议么?

编辑:这是在数据库中的初始值:

{\"wordsFont\":\"Times New Roman\",\"nameList\":[\"Overflow ,\",\"Stack \\\"\"]} 

和我不能改变它所生成的数据库的代码

+4

你会更好地修复任何产生的不是非常JSON文本。如果它被正确构建,额外的引号将会被转义,你可以像预期的那样json_decode()。 –

+0

@MarcB请看我的编辑。这是初始值 – Tom

+0

我唯一的建议是解决问题或使其创建者修复它:-) – prodigitalson

回答

1

我的问题是固定通过用替换stripslashes()函数urldecode()。 发生这种情况是因为以前有人使用过urlencode()。

$jsonFix = urldecode($json); 
$json = json_decode($jsonFix, true);