0

我正在尝试在 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"
        }
    }
}

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

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

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

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

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

没有转义的双引号,并且 for 的值imgDesc不是双引号。提前致谢!

4

1 回答 1

6

Why don't you just put imgDescription as regular array

var imgDescription = [imgType , imgDim, imgSize];

Stringify should take care of what you are trying to do, otherwise you are passing imgDescription as a string and stringify would escape the quotes.

e.g.

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));

Output:

{"fizz":"buzz","imgDesc":["PNG","350x150","127 KB"],"foo":"bar"}
于 2012-05-02T20:28:31.747 回答