【问题标题】:How to escape double quotes between JS and JSON如何在 JS 和 JSON 之间转义双引号
【发布时间】:2012-05-02 20:23:39
【问题描述】:

我正在尝试在 JS 中构造一个可以以非常特殊的格式传递到 JSON 中的字符串。期望的结果是如下形式的字符串:

["PNG","350x150","127 KB"]

PNG 对应于特定图像的类型,350x150 是图像的尺寸,127 KB 是图像的大小。这三个值中的每一个都是字符串变量:

var imgType = getImageType(); // Returns "PNG"
var imgDim = getImageDim(); // Returns "350x150"
var imgSize = getImageSize(); // Returns "127 KB"

var imgDescription = '["' + imgType + '","' + imgDim + '","' + imgSize + '"]';

// Sanity check
alert(imgDescription);

iVO.images[thisImage] = {
    "fizz":"buzz",
    "imgDesc":imgDescription,
    "foo":"bar"
}

alert(JSON.stringify(iVO));

第一个警报(在imgDescription 变量上)打印:

["PNG","350x150","127 KB"]

到目前为止,一切都很好。然而,当我们将它传递给 iVO 构造并对生成的 JSON 进行字符串化的那一刻,它会生成以下输出(在我漂亮地打印格式化之后):

{
    "images":
    {
        "4490i45"":
        {
            "fizz":"buzz",
            "imgDesc":"[\"PNG\",\"350x150\",\"127 KB\"]",
            "foo":"bar"
        }
    }
}

我所有的双引号(“)都被转义了(\”)!!!此外,imgDesc 的值用双引号括起来,这不是我们想要的(请参阅下面的所需 JSON):

当我将此 JSON 发送回服务器时,它会导致服务器阻塞。

不确定这里发生了什么,但我尝试了其他几个建议,包括用没有帮助的 '\x22' 实例替换我的双引号。

关于如何解决此问题以从JSON.stringify(iVO) 获得所需结果的任何想法?最终,这是唯一重要的事情,我们最终将以下内容发送到服务器:

{
    "images":
    {
        "4490i45"":
        {
            "fizz":"buzz",
            "imgDesc":["PNG","350x150","127 KB"],
            "foo":"bar"
        }
    }
}

没有转义的双引号,imgDesc 的值也没有双引号。提前致谢!

【问题讨论】:

  • 您是否尝试过添加额外的转义引号?
  • 听起来像是一个不错的建议@dweiss - 你有没有机会提供一个代码示例?再次感谢!
  • 您的目标不是有效的 JSON("imgDesc":["PNG","350x150","127 KB"] 等)。
  • 例如,如果你尝试过 var imgDescription = '["\"' + imgType + '\"","\"' + imgDim + '\"","\"' + imgSize + '\""]';
  • 哦,我以为你想强行引用。现在我看到您只是试图让 JSON 正确解析。在这种情况下,Anurag 的回答可能就足够了。

标签: javascript jquery json


【解决方案1】:

你为什么不把 imgDescription 作为常规数组

var imgDescription = [imgType , imgDim, imgSize];

Stringify 应该注意您要执行的操作,否则您会将 imgDescription 作为字符串传递,并且 stringify 会转义引号。

例如

var imgType = "PNG";
var imgDim = "350x150";
var imgSize = "127 KB";
var d = {
    "fizz":"buzz",
    "imgDesc":[imgType , imgDim, imgSize],
    "foo":"bar"
}
console.log(JSON.stringify(d));

输出:

{"fizz":"buzz","imgDesc":["PNG","350x150","127 KB"],"foo":"bar"}

【讨论】:

  • +1 即将添加相同的答案;)。你正在对一个字符串进行字符串化,所以它当然是在转义它。如果您对 object 进行字符串化,您将获得格式完美的 JSON。
  • 关键是 JSON.stringify 实际上返回一个假定的单引号字符串。该字符串实际上是 '{"fizz":"buzz",...' 并且一旦您将该字符串放入双编码字符串中,就会出现问题。
猜你喜欢
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2015-09-06
  • 2011-04-19
相关资源
最近更新 更多