2015-04-08 41 views
-1

我有一個問題,解碼一個JSON字符串與PHP,我很確定我知道是什麼造成它,但不知道如何解決它。我將一個數組轉換成JSON到一個隱藏的textarea,然後將其他信息發佈到我的PHP腳本中。在textarea POST後解碼JSON

以下是放入文本區域的JSON字符串示例:我正在使用$("#product_options").val(JSON.stringify(productOptions));將JSON放置到文本框中。

[{ 
    "optionID": "217", 
    "optionValueID": ["3"] 
}, { 
    "optionID": "218", 
    "optionValueID": ["5"] 
}, { 
    "optionID": "223", 
    "optionValueID": ["8", "11"] 
}, { 
    "optionID": "208", 
    "optionValue": ["test"] 
}, { 
    "optionID": "209", 
    "optionValue": ["zxvsdfg"] 
}, { 
    "optionID": "219", 
    "optionValue": ["2011-02-20"] 
}, { 
    "optionID": "221", 
    "optionValue": ["22:25"] 
}, { 
    "optionID": "220", 
    "optionValue": ["2011-02-20 22:25"] 
}] 

解碼很好,但一旦我用$_POST['json_array']張貼和讀取字段的值在PHP中也不會進行解碼。下面是轉換成JSON的整個帖子:

{ 
    "full_name": "sdfg", 
    "phone": "sdfg", 
    "email": "sdfg", 
    "notes": "sdgf", 
    "product_id": "42", 
    "product_options": "[{" 
    optionID ":" 
    217 "," 
    optionValueID ":[" 
    3 "]},{" 
    optionID ":" 
    218 "," 
    optionValueID ":[" 
    5 "]},{" 
    optionID ":" 
    223 "," 
    optionValueID ":[" 
    8 "," 
    11 "]},{" 
    optionID ":" 
    208 "," 
    optionValue ":[" 
    test "]},{" 
    optionID ":" 
    209 "," 
    optionValue ":[" 
    zxvsdfg "]},{" 
    optionID ":" 
    219 "," 
    optionValue ":[" 
    2011 - 02 - 20 "]},{" 
    optionID ":" 
    221 "," 
    optionValue ":[" 
    22: 25 "]},{" 
    optionID ":" 
    220 "," 
    optionValue ":[" 
    2011 - 02 - 20 22: 25 "]}]" 
} 

編輯:

這是我使用的JSON $productOptions = json_decode($_POST['product_options']);解碼PHP代碼。

我收到的錯誤是:Invalid argument supplied for foreach()但這是因爲我試圖從JSON轉換後的數組中循環。

+0

*「它不會解碼」 *請提供更多的信息。會發生什麼?你會得到哪個錯誤? –

+1

問題是你發佈的最後一個JSON是[not valid](http://jsonlint.com)。有兩個'''w這個打破了。直到你發佈代碼,你如何創建發佈的字符串,它很難幫助你 – kero

+1

看起來像你有一個JSON字符串在主JSON字符串內引用,刪除這些引號,它應該工作得很好 – Ghost

回答

0

經過3天的代碼戰鬥後,我發現:json_decode或eval無法處理"這是引用字符串中引用的引用的方式,但它顯示爲「在瀏覽器中,當我做了可變轉儲所以非常難以調試所以要解決我添加的代碼:

$_POST['product_options'] = str_replace('"', '"', $_POST['product_options']); 

似乎是一個愚蠢的PHP錯誤對我說:{

0

服務器和客戶端只與字符串進行通信。

發佈,你可以在調用值JSON.stringify()的值,以獲得有效的轉換字符串之前發送到服務器

後你有你的編碼的JSON你應該編碼的JSON與 json_decode解碼()。我這樣就會得到一個從字符串中解析出來的PHP變量。 link here for further information

+0

這正是我在做,但因爲我認爲,因爲我把它放在一個文本框中,我得到的字符串放在單引號中,我無法擺脫它們。 – user3167249

+0

您migth要考慮不使用該隱藏的輸入字段 給予一個字符串作爲一個值,並獲得該值可以增加編碼。 – szinter

0

我的猜測是,你要使用迭代的foreach數據結構,但你真的努力是遍歷型stdClass,你不能因爲它沒有實現Iterator類的對象。

什麼你可能想在第一時間做的是將JSON轉換爲你做一個associative array,通過像這樣json_decode的第二個參數設置爲true: json_decode($string, true)

當你得到這樣的錯誤,使用var_dumpprint_r來查看變量究竟是什麼以及它包含的內容會很有用。