【问题标题】:Stop JSON.stringify from adding escape characters停止 JSON.stringify 添加转义字符
【发布时间】:2017-08-16 15:01:54
【问题描述】:

我有一个对象,

var obj = {};

我在哪里设置属性

obj['prop'] = 'This is a "property"'

我怎么能停下来

JSON.stringify(obj)

返回

"This is a \"property\""

然后返回

"This is a "property""

理想情况下,有没有办法在我设置属性的地方做到这一点?即

obj['prop'] = 'This is a "property"'

【问题讨论】:

  • 好吧,如果可以的话,为什么会有这样的要求?
  • 那么,您毕竟不想要有效的 JSON 吗?然后不要使用 JSON 序列化器。
  • JSON 规范保留 " 用于定义键和值。有效的 JSON 将转义值中的 " 字符。
  • “它的功能”...? Soo……Terraform 是在解析 JSON,还是尝试在这里进行代码生成……?
  • 那么您并没有真正生成 JSON 开始...?另外:terraform.io/docs/configuration/syntax.html#json-syntax

标签: javascript json


【解决方案1】:

如果你真的想要这个,你可以使用 JSON.stringify(obj).replace(/\\/g,'') 之类的东西。

注意:输出将不是有效的 JSON,如果您的 JSON 中有任何“合法”反斜杠,则可能会发生数据丢失。

【讨论】:

  • 当然,这也会从您的数据中删除您实际上可能想要的所有“合法”反斜杠...
  • 是的,我也担心这个,所以我可能不会结束这条路
  • @db2791 如果你能解释一下为什么你想要这个,我们也许能更好地帮助你...
  • @JeffHuijsmans 这是我必须使用的代码。最终文件由 Terraform 使用,它要求函数中使用的任何双引号都必须保留没有转义字符。目标是以编程方式生成这些函数
  • 但是,函数本身是在 JSON 中定义的,还是有其他程序可以获取 JSON 并将其放入 Terraform?因为这样你就可以在输入到 Terraform 之前删除转义字符。
【解决方案2】:

正如评论中所解释的,您无法阻止双引号 (") 被转义,因为该字符是保留的(在规范中定义)。您可以做的是使用解决方法:使用单引号 ' 引用文本中的某些内容。

如果您仍然想在后面看到双引号,那么这很难实现。将' 替换为" 是不够的,因为有些词自然而然地使用'。喜欢it'sdon't

const obj = {};

obj['myKey'] = "first word is 'Hello World'";
obj['anotherKey'] = "second word is 'Lorum Ispum'...";

console.log(JSON.stringify(obj));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多