2012-02-10 6 views
1

私はnode.jsにDBからデータを取り出し、それを操作し、消費するためにそれを送信するAPIを書いています。オブジェクトを文字列にするときに、数値の文字列化を防ぐにはどうすればよいですか?

私はこのようになりますオブジェクトがあります:私はJSON.stringifyを呼び出し、上記目的を渡すと、私はこれを取得

{ 
    2734899508: "Chicken", 
    2843594878: "Fish" 
} 

を:

{ 
    "2734899508": "Chicken", 
    "2843594878": "Fish" 
} 

私は、文字列をしたいと思いますテンキーは文字列に変換されません。これはどうすればいいですか?

+0

JSONを使いたい場合は、JSONを使用する必要があります。 – kapa

答えて

0

あなたはそれぞれのキー/値は、このように文字列化整数であるかどうかをテストすることができます:

if(parseInt(value)==value) { 
    value = parseInt(value); 
} 

注:私たちは、文字列の両方を強制したいので、ここでは意図的ではなく、=====を使用しては。

を知っていれば、どのキー/値が文字列化されたintであるか知っていれば、真ん中の行を修正して修正することができます。

いつも===を使用しない限り、このjsonをブラウザまたは他のJavaScriptクライアントに送信すると、intか文字列かどうかに違いはありません。

+0

ブラウザと違いがない場合は、文字列は問題ありません。 –

1

オブジェクトキーとしてのNumericsはサポートされていません。文字列キーに変換されます。myObj [2843594878]を実行すると、正しい値が返されるため、アクセサーにも数字の錯覚があります。これを文字列に変換します。

次の方法で、この前のシリアライズに確認することができます:あなたはこれらの数字キーがstring: valueペアから実際の文字列であることがわかります

JSON syntaxを参照
console.log(typeof(Object.keys(myObj)[0])); 
1

。パーサーは寛大で、stringに変換しています。オブジェクトの表記法として

、あなたの識別番号が、とにかく少し奇妙になるだろうことは、オブジェクトmyFridgeを持っていた場合、例えば、それはと同等のものになるだろう。しかし

myFridge.2734899508 = "Chicken" // WRONG 

、あなたは他の人が指摘したように、まだ、ブラケットの構文を使用することができます。

myFridge["2734899508"] = "Chicken" 

あなたは、たとえば、厳密に数値を保持するための配列のような他のことを考えることができます。

{ 
fridgeItems: 
[ 
    [ 2734899508, "Chicken" ], 
    [ 2843594878, "Fish" ] 
] 
} 

は、あなたのデータを少し良く表しているかもしれません。