如何转义JS和JSON之间的双引号

How to escape double quotes between JS and JSON

本文关键字:之间 JSON JS 何转义 转义      更新时间:2023-09-26

我正在尝试在JS中构造一个字符串,该字符串可以作为具有非常特殊格式的JSON传递到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 的值没有双引号。提前感谢!

你为什么不把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"}