【问题标题】:A working Json library for Javascript?用于 Javascript 的有效 Json 库?
【发布时间】:2008-11-18 17:24:38
【问题描述】:

我去了http://www.json.org/js.html 并下载了 json2.js,我想我会没事的,毕竟该网站在谷歌搜索“json javascript”中名列前茅 - 他们也有这个非常酷的 url :)

所以我一直在使用它,它看起来很好,但现在我开始遇到麻烦 - 它根本不会解析我使用 Newtonsoft 的 JSON .NET 序列化程序编码的某些内容。好吧,也许.net seralizer 搞砸了?不是我看到的那样 - 它会生成一个看起来像完美 json 的精细 javascript 字符串。

当它必须对单引号 ' 或者双引号 " 进行编码时,问题就来了。 看看这些例子(只是完整字符串的一部分)

{"Id":10651,"Text":"\'69"}
{"Id":184,"Text":"13\""}

我错过了什么吗?它是一个更大字符串的一部分,并且都放在一个像这样的 javascript 变量中

var jsonObject = '[{"Id":46,"Type":2,.....................

我认为它必须转义字符串中的单引号以避免与我在单引号中的字符串换行冲突,并转义双引号以避免与 json 格式冲突?

所以要么我做错了,要么 json2.js 做错了?或者是的,也许 .net json 搞砸了——我有点想我搞砸了,但我一直在尝试做各种事情来帮助解析,比如在序列化/转义之前进行转义/取消转义等。反序列化。

【问题讨论】:

  • 当你 eval('(' + jsonObject + ')') 时会发生什么?这将有助于确定问题所在。
  • 我删除了 ' 的转义,因为我现在将 json 作为对象而不是字符串输出 - 然后像您发布的那样进行评估并得到:Microsoft JScript 编译错误:预期的 ']' - 所以我的 .net序列化程序搞砸了?
  • @JoelAnaair 你应该使用 eval 来解析 JSON!
  • @Alex 我同意你不应该在生产代码中使用 eval 来解析 JSON。但是,它对于查找 JSON 块中的语法问题很有用。感谢您指出这一点。

标签: javascript json


【解决方案1】:

好的,我解决了这个问题。实际上,乔尔在对我的问题的评论中给我的提示是尝试评估它,而不是让我认为我可以信任我正在尝试解析/评估的这个 json,并且因为我在构建页面时就知道它,为什么不要将其作为对象硬编码到网页中 - 不会转义引号或任何东西,也不会评估,最重要的是 - 没有字符串:P

感谢 Joel 和您的文章 :)

【讨论】:

  • 很高兴听到您解决了问题。正如 Alex 在他的评论中指出的那样,将 eval 用于实时代码中的任何内容都不是一个好主意,但如果您使用受信任的 JSON,它对于调试很有用。
【解决方案2】:

这可能是一个线索...

http://binnyva.blogspot.com/2006/10/invalid-json.html

如果你正在序列化,或许可以通过序列化到'' 来保护自己。

【讨论】:

  • 但是json是带双引号的,我用的单引号是用来定义json字符串的。幸运的是,我不必(例如在 c# 中)用双引号表达我的字符串(或者我必须转义 json 中的每个双引号!唷 :)
  • 我也想过,但这不应该是 .net json 序列化器和 javascript json 反序列化器的工作吗?我的意思是我使用预制对象,所以我不必自己进行(反)序列化。
猜你喜欢
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 2011-06-11
  • 2014-03-29
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多