簡體   English   中英

從PHP解析JSON

[英]Parsing JSON from PHP

我正在嘗試從PHP腳本返回的JSON對象中進行迭代。 返回部分是這樣的:

$json = array("result" => -1, 
    "errors" => array(
    "error1" => array("name" => "email","value" => "err1"),
    "error2" => array("name" => "pass","value" => "err2")
        )
        ); 

$encoded = json_encode($json);
echo $encoded;

因此,在JavaScript中,我可以執行以下操作:

var resp = eval('(' + transport.responseText + ')');
alert(resp.length);
alert(resp.errors.error1.name); 

但是我不能:

alert(resp.errors.length);

我想遍歷errors ,這就是為什么我要獲取長度。 有人可以給我提示嗎? 謝謝!

為此,您需要將resp.errors用作Javascript數組,而不是Javascript對象。

在PHP中,數組可以具有named-keys; 用Javascript是不可能的; 因此,當使用json_encodeerrors PHP數組被“轉換”為JS對象:您的JSON數據如下所示:

{"result":-1,"errors":{"error1":{"name":"email","value":"err1"},"error2":{"name":"pass","value":"err2"}}}

相反,您希望它看起來像這樣:

{"result":-1,"errors":[{"name":"email","value":"err1"},{"name":"pass","value":"err2"}]}

請注意,沒有命名鍵的數組中的“ errors ”。

為此,您的PHP代碼必須為:

$json = array(
    "result" => -1, 
    "errors" => array(
            array("name" => "email","value" => "err1"),
            array("name" => "pass","value" => "err2")
        )
    ); 
$encoded = json_encode($json);
echo $encoded;

(只需刪除有關errors的named-keys)

看一下您的JSON輸出。 resp.errors將是這樣的:

{"error1": {"name": "email", "value": "err1"}, ...}

如您所見,它是一個對象,而不是一個數組(因為您將其傳遞給一個關聯數組,而不是一個數字索引數組。)如果要遍歷JavaScript中的對象,可以這樣進行:

for (var error in resp.errors) {
    alert(resp.errors[error].name);
}

如果希望它是一個JavaScript數組,則PHP應該如下所示:

$json = array("result" => -1, "errors" => array(
    array("name" => "email","value" => "err1"),
    array("name" => "email","value" => "err1")
));

如果檢查Firebug中的評估對象,您會發現“錯誤”不是數組而是對象(PHP中的關聯數組轉換為JS中的對象)。 因此,您需要使用for-in語句來遍歷對象。

您需要使用hasOwnProperty檢查每個屬性名稱,以確保它是您發送的內容,而不是某些原型屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM