【问题标题】:How can I parse a JSON object containing a PHP array of objects?如何解析包含 PHP 对象数组的 JSON 对象?
【发布时间】:2012-01-23 02:16:28
【问题描述】:

我创建了一个 AJAX 函数,该函数与分页链接一起使用以动态加载新的帖子页面,并且一切正常,除了我不知道如何解析像这样的 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 ); 时,我在 Google Chrome Javascript 控制台中收到以下错误:

Uncaught SyntaxError: Unexpected end of input

更新 3: 我刚刚检查了 Firebug,它似乎只为 JSON 响应文本返回这个:

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

【问题讨论】:

  • Sooo.... 你想向我们展示实际的 JSON 吗?
  • 您是否尝试从 JavaScript 访问这些变量?
  • 字符串长度超过 6500 个字符,非常抱歉!更新了我的问题。

标签: php javascript ajax json parsing


【解决方案1】:

我假设您想通过 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响应方法(有很多方法可以实现)

var data = jQuery.parseJSON(recievedData)

【讨论】:

    【解决方案2】:

    由于您使用的是 jQuery,因此最好的方法是使用 parseJSON 方法:

    var respObj = jQuery.parseJSON(response);

    【讨论】:

    • 当我使用它时,我在 Google Chrome Javascript 控制台中收到以下错误:Uncaught SyntaxError: Unexpected end of input - 知道为什么会发生这种情况吗?
    • 这很可能意味着您的 JSON 文本中有一个未终止的字符串。这可能是由于错误地转义了一个字符串。
    • 你是对的,我必须对它进行双重编码,现在我可以在我的 Javascript 代码中获取变量。谢谢!
    【解决方案3】:

    JSON 是有效的 javascript,因此最直接的解决方案(假设您 100% 信任 json 的来源)是简单地 eval() 它。

    var response = eval(the_json);
    
    if (response.success){
        var posts = response.posts
    }
    

    如果您使用 jQuery 之类的库,则有内置方法可以更安全地评估 json 字符串。

    【讨论】:

    • 我也在使用 jQuery 库,脚本依赖于它。你能告诉我怎么做吗?
    • 您可能还想包含有关新 ECMAScript 5 标准 window.json 的注释。
    • JSON.parse 更正确。如果 JSON 来自不受信任的来源,则您正在评估他们的任意 javascript。即使在旧版本的 IE 中,我过去也只是从 json.org 获取 JSON 类,以获得更安全的方法。
    • Paul Irish 还写了a post that mentions the way jQuery parses JSON。信息量很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2020-08-21
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多