字符串化时间戳对象
Posted
技术标签:
【中文标题】字符串化时间戳对象【英文标题】: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
和 <a>
是什么?如果它们是 DOM 节点引用,则它们不能被序列化。
@bfavaretto 是的,你是对的......有没有解决方法?
【参考方案1】:
该对象似乎包含对document
和a
标记的引用。在删除此类引用之前,您将无法对其进行序列化。
一个简单的解决方案是:
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(正是您要尝试的):
underscorejs.org cryojs【讨论】:
全面披露,我是这个库的作者:github.com/hunterloftis/cryo - 'JSON on steroids' - 它让你可以毫无问题地围绕 DOM 元素进行字符串化。使用大量单元测试替换 JSON.stringify/JSON.parse。【参考方案2】:不要使用普通对象,而是对元素使用 XPath。
【讨论】:
以上是关于字符串化时间戳对象的主要内容,如果未能解决你的问题,请参考以下文章