0

非常に特殊な形式でJSONに渡すことができる文字列をJSで作成しようとしています。望ましい結果は、次の形式の文字列です。

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

PNGは特定の画像のタイプに対応し、は画像のサイズ350x150127 KBは画像のサイズです。これらの3つの値はそれぞれ文字列変数です。

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はなく、の値は二重引用符ではありません。前もって感謝します!

4

1 に答える 1

6

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"}
于 2012-05-02T20:28:31.747 に答える