【问题标题】:Single quotes within json value [duplicate]json值中的单引号[重复]
【发布时间】:2015-11-15 14:21:38
【问题描述】:

Javascript 无法读取这个 json 字符串,因为它包含一个单引号字符,它被视为字符串的结尾。

如何转义单引号,使其不被视为字符串的结尾?

var json = '{"1440167924916":{"id":1440167924916,"type":"text","content":"It's a test!"}}';

var parsed = JSON.parse(json);

【问题讨论】:

  • 为什么要写出一个序列化为 JSON 的对象,然后在下一行对其进行解码?只需编写一个对象文字。根本不需要将您的对象放在字符串中。
  • 有趣的是,当有人问一个简单的 js 问题时,如何在同一分钟内有大量相同的答案。这肯定是重复的。
  • 这与 JSON 无关。问题是您在用单引号分隔的 JavaScript 字符串文字中有一个单引号。字符串包含 JSON 的事实是无关紧要的。 (为什么你要写一个 JSON 的静态字符串然后解析它,为什么不直接从边缘删除引号并将其视为 JavaScript 对象文字?)
  • @Fuser97381 不,这不是解决方案。只是在php输出json之前去掉外层单引号。
  • 他正在为您提供正在发生的事情以及如何重现它的示例 - 如果他没有,您肯定会抱怨。对它进行更抽象的思考。数据中有一个撇号。也许更好的问题是“我应该如何编码这些数据以消除撇号的问题?”

标签: javascript json formatting


【解决方案1】:

escape the character使用反斜杠:

var json = '{"1440167924916":{"id":1440167924916,"type":"text","content":"It\'s a test!"}}';
var parsed = JSON.parse(json);

【讨论】:

  • 使用反斜杠是“转义”字符的示例。查看更多信息here
  • 这回答了我发布的问题。但是,我使用的解决方案是直接从 json 创建一个对象文字,而不是首先通过简单地删除外部单引号将其转换为字符串。感谢昆汀指出这一点。
  • 他正在提供样本数据。他实际上并没有写出价值文字。他可能想要一些更全局的东西,而不是他必须通过显式的 escapeThisApostrophe(...) 函数运行每个字符串值的地方,这将是非常低效和愚蠢的。
【解决方案2】:

只需用反斜杠转义单引号,例如\'

var json = '{"1440167924916":{"id":1440167924916,"type":"text","content":"It\'s a test!"}}';

var parsed = JSON.parse(json);

//Output parsed to the document using JSON.stringify so it's human-readable and not just "[object Object]":
document.write(JSON.stringify(parsed));

【讨论】:

  • 这对他的样本数据来说很棒;这不是现实世界的解决方案。
【解决方案3】:

用反斜杠转义

var json = '{"1440167924916":{"id":1440167924916,"type":"text","content":"It\'s a test!"}}';

var parsed = JSON.parse(json);

【讨论】:

  • 这给出了 SyntaxError: Unexpected token ILLEGAL
  • @Quentin:现在应该可以正常工作了。我认为在尝试缩进 JSON 时,按“enter”键会导致问题。
猜你喜欢
  • 2021-10-26
  • 2012-01-06
  • 1970-01-01
  • 2020-07-03
  • 2018-01-07
  • 2011-10-25
  • 2012-04-15
  • 2010-10-08
  • 1970-01-01
相关资源
最近更新 更多