json序列化的奇怪之处

发布于 2024-10-25 04:29:49 字数 356 浏览 1 评论 0原文

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

var Object1 = '[{....}]';

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

var Object2 = '{...}';

当我运行 eval 时,它不适用于 Object2。我只是不明白为什么序列化不同,因为我对两者使用相同的原理;我显然做错了什么。如果您遇到类似问题或有建议,请告诉我。

谢谢。

I'm using a custom JavaScriptConverter to serialize two objects. One of them is a list of objects and it works just fine; the other one is a single object.
I serialize both and put them in the source code of the page. When I look at them HTML source in a browser, I see that the one that works looks like this:

var Object1 = '[{....}]';

while the one that doesn't work looks like this:

var Object2 = '{...}';

When I run an eval, it doesn't work with Object2. I'm just not seeing why the serialization is different since I'm using the same principal for both; I'm obviously doing something wrong. If you've run into a similar issue or have a suggestion, then please let me know.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

熊抱啵儿 2024-11-01 04:29:49

您遇到了 Javascript 解析歧义。

而不是:

eval(json)

你需要:

eval('(' + json + ')')

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

{ a: 0, b: 1 }

或块:

{ var a = 3; f(a); }

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

You are running into a Javascript parsing ambiguity.

Instead of:

eval(json)

you need:

eval('(' + json + ')')

In Javascript, an open brace can start either an object literal:

{ a: 0, b: 1 }

or a block:

{ var a = 3; f(a); }

However, a block cannot appear in an expression, so adding the parentheses resolves the ambiguity.

心意如水 2024-11-01 04:29:49

规范第 12.4 节说:

ExpressionStatement 无法启动
带有左花括号,因为
这可能会使其与 a 产生歧义
堵塞。另外,还有一个表达式语句
不能以 function 关键字开头
因为这可能会让事情变得模棱两可
带有函数声明。

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

Section 12.4 of the spec says:

An ExpressionStatement cannot start
with an opening curly brace because
that might make it ambiguous with a
Block. Also, an ExpressionStatement
cannot start with the function keyword
because that might make it ambiguous
with a FunctionDeclaration.

There are numerous workarounds/solutions discussed here:

毁梦 2024-11-01 04:29:49

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

There is nothing weird. In JSON you have normal objects which are denoted with { ... } and lists of normal objects which are denoted with [{ ... }, { ... }, ...] and . So if your second object is not a list you cannot expect it to be serialized as such. If you wanted your second object to be enclosed with [] you could create a list containing one element which is the second object and then serialize this list.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文