【问题标题】:JSON.stringify on nested object ignores nested objects嵌套对象上的 JSON.stringify 忽略嵌套对象
【发布时间】:2014-05-06 13:21:25
【问题描述】:

我正在生成一个对象,当您使用 Chrome 检查它时,它看起来像这样:

当我尝试使用 JSON.stringify 对该对象进行字符串化时,我得到以下结果:

{
    "results" : [{
            "ID" : 1,
            "NAME" : "Admin"
        }, {
            "ID" : 2,
            "NAME" : "Standarduser"
        }, {
            "ID" : 3,
            "NAME" : "Consultant"
        }, {
            "ID" : 4,
            "NAME" : "Leergruppe"
        }
    ]
}

由于某种原因,所有嵌套节点都丢失了。 我敢肯定这非常简单和明显,但目前我根本找不到我的错误。 非常感谢您的帮助!

编辑:JSFiddle 如何创建 JSON:http://jsfiddle.net/VJTaV/

【问题讨论】:

  • 你是如何构建这个对象的?我创建了相同的对象,JSON.stringify 工作正常:jsfiddle.net/H8CF2
  • 嗨 Rocket,我已经编辑了我的问题并在 jsfiddle 上创建了一个条目。它不可运行,但我想这足以了解它是如何创建的。

标签: javascript json object stringify


【解决方案1】:

由于你的 jsfiddle 显示了一个 ajax 调用,你很可能调用了JSON.stringify()before the ajax results are available。您需要将其放入成功回调中,以便在 ajax 完成后执行。

Chrome 检查器将显示属性,因为当您在记录对象后对其进行修改时,您稍后可以展开并查看在调用 console.log 时尚不存在的新属性。

【讨论】:

  • 谢谢,这当然是原因。现在我已将 .get 调用更改为 .ajax 调用并使其同步。
【解决方案2】:

正如 Bergi 所说,您正在尝试对尚未加载的数据进行字符串化,因为 $.get 调用是异步的。您可以将 .done 回调附加到它们中的每一个,或者,如果您只想在 all 请求完成时执行代码,请使用 jQuery.when

var jqXHRs = [];

$( data.results ).each(function( key, val ) {
  var jqXHR = $.get( userDataUrl, "", function( res ) {
    // ...
  });

  jqXHRs.push(jqXHR);
});

$.when.apply( $, jqXHRs ).done(function() {
    console.log( val ); // will log all nested nodes
});

【讨论】:

  • 非常感谢您的输入,但有一个问题:您写道,我可以将 .done 附加到每个请求 - 但此时我看不出使用成功回调的区别。
  • 成功回调是老API,现在推荐使用.done,但是效果还是一样的。
猜你喜欢
  • 1970-01-01
  • 2013-11-07
  • 2020-06-04
  • 2013-07-04
  • 2019-10-14
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 2018-10-12
相关资源
最近更新 更多