2012-09-24 37 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);