我正在使用一个定制的JavaScriptConverter来序列化两个对象。其中一个是对象列表,它工作得很好;另一个是单个对象。我序列化它们并将它们放在页面的源代码中。当我在浏览器中查看它们的HTML源代码时,我看到工作正常的是这样的:
var Object1 = '[{....}]';而不起作用的那个看起来像这样:
var Object2 = '{...}';当我运行一个eval时,它不能与Object2一起工作。我只是不明白为什么序列化是不同的,因为我对两者都使用了相同的主体;我显然做错了什么。如果你遇到了类似的问题或有什么建议,请让我知道。
谢谢。
发布于 2011-03-22 05:52:58
您遇到了Javascript解析的多义性。
而不是:
eval(json)您需要:
eval('(' + json + ')')在Javascript中,左大括号可以启动对象文字:
{ a: 0, b: 1 }或者一个块:
{ var a = 3; f(a); }但是,块不能出现在表达式中,因此添加括号可以解决歧义问题。
发布于 2011-03-22 05:57:49
the spec的第12.4节规定:
ExpressionStatement不能以左大括号开头,因为这可能会使它与Block不明确。此外,函数不能以ExpressionStatement关键字开头,因为这可能会使其与FunctionDeclaration不明确。
这里讨论了许多解决方法/解决方案:
发布于 2011-03-22 05:50:54
没有什么奇怪的。在JSON中,有用{ ... }表示的普通对象和用[{ ... }, { ... }, ...]和表示的普通对象列表。因此,如果你的第二个对象不是一个列表,你就不能期望它被序列化。如果希望用[]封装第二个对象,可以创建一个包含第二个对象的元素的列表,然后序列化这个列表。
https://stackoverflow.com/questions/5384148
复制相似问题