首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json序列化怪异

json序列化怪异
EN

Stack Overflow用户
提问于 2011-03-22 05:46:02
回答 3查看 102关注 0票数 1

我正在使用一个定制的JavaScriptConverter来序列化两个对象。其中一个是对象列表,它工作得很好;另一个是单个对象。我序列化它们并将它们放在页面的源代码中。当我在浏览器中查看它们的HTML源代码时,我看到工作正常的是这样的:

代码语言:javascript
复制
var Object1 = '[{....}]';

而不起作用的那个看起来像这样:

代码语言:javascript
复制
var Object2 = '{...}';

当我运行一个eval时,它不能与Object2一起工作。我只是不明白为什么序列化是不同的,因为我对两者都使用了相同的主体;我显然做错了什么。如果你遇到了类似的问题或有什么建议,请让我知道。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-22 05:52:58

您遇到了Javascript解析的多义性。

而不是:

代码语言:javascript
复制
eval(json)

您需要:

代码语言:javascript
复制
eval('(' + json + ')')

在Javascript中,左大括号可以启动对象文字:

代码语言:javascript
复制
{ a: 0, b: 1 }

或者一个块:

代码语言:javascript
复制
{ var a = 3; f(a); }

但是,块不能出现在表达式中,因此添加括号可以解决歧义问题。

票数 1
EN

Stack Overflow用户

发布于 2011-03-22 05:57:49

the spec的第12.4节规定:

ExpressionStatement不能以左大括号开头,因为这可能会使它与Block不明确。此外,函数不能以ExpressionStatement关键字开头,因为这可能会使其与FunctionDeclaration不明确。

这里讨论了许多解决方法/解决方案:

  • http://rayfd.wordpress.com/2007/03/28/why-wont-eval-eval-my-json-or-json-object-object-literal/
票数 1
EN

Stack Overflow用户

发布于 2011-03-22 05:50:54

没有什么奇怪的。在JSON中,有用{ ... }表示的普通对象和用[{ ... }, { ... }, ...]和表示的普通对象列表。因此,如果你的第二个对象不是一个列表,你就不能期望它被序列化。如果希望用[]封装第二个对象,可以创建一个包含第二个对象的元素的列表,然后序列化这个列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5384148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档