2012-01-23 154 views
1

我創建了一個與分頁鏈接一起使用的AJAX函數來動態加載帖子的新頁面,並使所有的工作都很好,除非我無法弄清楚如何解析這樣的JSON對象。如何解析包含PHP數組對象的JSON對象?

這是一個越來越爲JSON通過PHP的風格:

Array (
    [0] => stdClass Object (
     ['var1'] => val1 
     ['var2'] => var2 
    ) 
    [1] => stdClass Object (
     ['var1'] => val1 
     ['var2'] => var2 
    ) 
    [3] => stdClass Object (
     ['var1'] => val1 
     ['var2'] => var2 
    ) 
) 

,並傳遞給它這樣的:

$response = json_encode(array('success' => true, 'posts' => $new_posts)); 

哪裏$new_posts是我想要的數組解析。

任何人都可以告訴我如何訪問這些變量及其值嗎?謝謝。

更新:Here's the JSON string

我試圖從JavaScript訪問這些。

更新2:當我使用var posts = JSON.parse(response.posts);我得到了谷歌Chrome的JavaScript控制檯以下錯誤:

Uncaught SyntaxError: Unexpected end of input

更新3:我只是檢查Firebug的,它只是似乎返回該爲JSON響應文本:

{"success":true,"posts":[]}

+3

Sooo ....你是否想向我們展示實際的JSON? –

+0

你想從JavaScript訪問這些變量嗎? – sanmai

+0

那麼這個字符串超過了6500個字符,非常抱歉!更新我的問題。 – Jared

回答

1

,最好的辦法是使用parseJSON方法:

var respObj = jQuery.parseJSON(response);

+0

當我使用這個時,我在Google Chrome Javascript控制檯中得到以下錯誤:'未捕獲的SyntaxError:意外的輸入結束' - 任何想法爲什麼會發生? – Jared

+1

這很可能意味着您的JSON文本中存在未終止的字符串。這可能是由於錯誤逃脫的字符串。 – Abbas

+0

你說得對,我必須對它進行雙重編碼,現在我可以在我的Javascript代碼中獲得變量。謝謝! – Jared

0

JSON是有效的JavaScript,所以最直接的解決方案(假設您信任json的源頭100%)僅僅是eval()它。

var response = eval(the_json); 

if (response.success){ 
    var posts = response.posts 
} 

如果您使用像jQuery這樣的庫,那麼就有內置的方法來更安全地評估json字符串。

+0

我也在使用jQuery庫,腳本依賴於它。你能告訴我如何做到這一點? – Jared

+1

您可能還想包含有關新ECMAScript 5標準['window.json'](https://developer.mozilla.org/En/Using_native_JSON)的註釋。 –

+0

JSON.parse更正確。如果JSON來自不受信任的來源,那麼您將評估他們的任意javascript。即使在舊版本的IE中,我也只是從json.org獲取JSON類,以獲得更安全的方式。 – umassthrower

2

我假設你想通過JavaScript訪問,因爲你在PHP中有這個。在您的XHR成功回調中,將響應插入JSON.parse();和如下

var data = JSON.parse(recievedData); // newer browsers, optionally you can use jQuery or eval() 
console.log(data); // test; 
// loop through all data 
for(var i=0;i<data.length;++i) { 
    console.log(data[i].var1); // expects val1 
    console.log(data[i].var2); // expects val2 
} 
//access one bit 
console.log(data[0].var1); 

jQuery的響應方法來訪問的一切(有很多方法可以實現這一點)由於您使用jQuery

var data = jQuery.parseJSON(recievedData)