2012-01-23 153 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)