2012-05-02 21 views
0

JSONに非常に特殊な形式で渡すことができるJSで文字列を作成しようとしています。所望の結果は、次の形式の文字列である:[「127キロバイト」、「350x150」「PNG」]JSとJSONの二重引用符をエスケープする方法

PNG350x150が画像のある特定の画像の種類に対応

サイズは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変数に)プリント:これらthreee値の各々は、文字列変数である

[ "PNG"、 "350x150"、 "127キロバイト"]

これまでのところ、とても良いです。

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

逃れてきた私の二重引用符( ")の全て(ただし、我々はiVO構造にそれを渡し、その結果JSONを文字列化分、それは(Iかわいいプリントフォーマットした後に)次の出力を生成し、 \ ")!!!また、imgDescの値は二重引用符で囲まれています(希望するJSONは下記参照)。

私はこのJSONをサーバーに送り返すと、サーバーがチョークする原因となります。

ここで何が起こっているのかわかりませんが、二重引用符を'\x22'インスタンスに置き換えるなど、いくつかの他の提案を試してみましたが、これは役に立たなかったものです。

JSON.stringify(iVO)から希望の結果を得るためにこれを修正する方法はありますか?

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

はなし二重引用符をエスケープし、imgDescの値は二重引用符で囲まれていない。最終的にはそれが唯一の問題は、我々は、サーバーに次の送信を終わることを、ません。前もって感謝します!

+0

あなたは余分なエスケープ引用符を追加しようとしたことがありますか? – dweiss

+0

いい加減な提案のような音@dweiss - あなたはコード例を提供することができますか?再度、感謝します! – IAmYourFaja

+0

ターゲットが有効なJSON( "imgDesc":["PNG"、 "350x150"、 "127 KB"]など)ではありません。 – Will

答えて

6

なぜあなたは普通の配列としてimgDescriptionを入れていない

var imgDescription = [imgType , imgDim, imgSize]; 

文字列化では、あなたがやろうとしているものの世話をする必要がありますそうでなければ、文字列としてimgDescriptionを渡すと文字列化には引用符をエスケープします。

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

+1同じ回答を追加しようとしています;)。あなたは文字列をストリングしているので、もちろんそれをエスケープしています。 *オブジェクト*を文字列化すると、完全にフォーマットされたJSONが得られます。 –

+0

Indubitably !!!! – IAmYourFaja

+0

ポイントは、JSON.stringifyが実際には引用符で囲まれたSINGLE文字列を返すという点です。文字列は実際に '{"fizz": "buzz"、...'であり、その文字列を二重にエンコードされた文字列に入れるとすぐに問題が発生します。 – tmarthal

関連する問題