【问题标题】:Stringify timestamp object字符串化时间戳对象
【发布时间】:2012-12-24 06:57:48
【问题描述】:

我如何JSON.stringify以下数据结构?

var Records = {
    1357775376232: {
        pageX: 0,
        pageY: 0,
        scrollLeft: 0,
        scrollTop: 0,
        target: #document,
        type: null,
        value: undefined
    },
    1357775376243: {
        pageX: 69,
        pageY: 10,
        scrollLeft: 0,
        scrollTop: 0,
        target: <a>,
        type: "click",
        value: ""
    }
    // ...etc...
};

【问题讨论】:

  • JSON.stringify() 不起作用是怎么回事?
  • @Pointy nope,我得到Uncaught TypeError: Converting circular structure to JSON 并且,that 也无济于事......
  • 这意味着你有一个不可序列化的对象。如果您要发布 确切 对象的外观而没有“... etc ...”部分,那么有人可能会提供帮助。
  • #document&lt;a&gt; 是什么?如果它们是 DOM 节点引用,则它们不能被序列化。
  • @bfavaretto 是的,你是对的......有没有解决方法?

标签: javascript json object serialization stringify


【解决方案1】:

该对象似乎包含对documenta 标记的引用。在删除此类引用之前,您将无法对其进行序列化。

一个简单的解决方案是:

var arrayWithRefs = [...];
var arrayWithout = [];

for (var i = 0; i < arrayWithRefs.length; i++) {
  arrayWithout[i] = {
    safeProperty: arrayWithRefs[i].safeProperty;
    // copy whatever you want, omitting document references
  };
}

var serialized = JSON.stringify(arrayWithout);

当然,还有一些库可以帮助您挑选出您想要的属性。我会推荐 underscore(通用)或 cryo(正是您要尝试的):

【讨论】:

  • 全面披露,我是这个库的作者:github.com/hunterloftis/cryo - 'JSON on steroids' - 它让你可以毫无问题地围绕 DOM 元素进行字符串化。使用大量单元测试替换 JSON.stringify/JSON.parse。
【解决方案2】:

不要使用普通对象,而是对元素使用 XPath。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2016-01-23
    • 2011-05-22
    相关资源
    最近更新 更多