非常に特殊な形式でJSONに渡すことができる文字列をJSで作成しようとしています。望ましい結果は、次の形式の文字列です。
["PNG"、 "350x150"、 "127 KB"]
PNG
は特定の画像のタイプに対応し、は画像のサイズ350x150
、127 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
はなく、の値は二重引用符ではありません。前もって感謝します!