2016-06-27 6 views
1

をエンコードした後、実際のint型に変換しますjavascriptオブジェクトのキーは、JSONは、私がこれ持って

var a = {}; 
a[1] = 1; 
a[4] = 4; 
console.log(JSON.stringify(a)); 

を、私は得る:

{"1":1,"4":4} 

が、私は取得したい:

{1:1,4:4} 

どのようにこれに達する?言い換えれば、私は本当のintであることを鍵にしたい。

+5

オブジェクトキーは_always_文字列です。そのようなものは存在しません。 – SLaks

+2

...最後のコード例は無効なJSONです。 –

+0

今、配列に変換する方法は? –

答えて

3

JSON.stringify()メソッドを呼び出すと、有効なJSON文字列が作成されます。 有効なJSONのルールの1つは、すべてのプロパティを "引用符"で囲むことです。

JSON.stringifyを使用したいと思うような結果が得られないのはなぜですか?

このようなオブジェクトを配列に変換する場合は、そのような関数を使用するなど、可能です。

function numerableObjectToArr(obj) { 
    var result = []; 
    var keys = Object.keys(obj); 
    keys.forEach(function(item){ 
    result.push(obj[item]); 
    }) 
    return result; 
} 

var a = {}; 
a[1] = 1; 
a[4] = 4; 
numerableObjectToArr(a); // returns [1, 4] 

このようにして、objの既存のプロパティの値を持つArrayを受け取るだけです。

しかし、あなたの小道具の名前は配列のインデックスを意味し、あなたが小道具名として常に数が存在することを確信している場合 - あなたはこの機能を向上させることができます

function numerableObjectToArr(obj) { 
    var result = []; 
    var keys = Object.keys(obj); 
    keys.forEach(function(item){ 
    result[+item] = obj[item]; //we put index, then we put value to that place in array 
    }) 
    return result; 
} 

var a = {}; 
a[1] = 1; 
a[4] = 4; 
numerableObjectToArr(a); // returns [undefined, 1, undefined, undefined, 4] 
+0

確かに、私はそれがサーバー側の問題であることを認識しました:http://stackoverflow.com/questions/3445953/how-can-i-force-php-to-use-strings-for-array-keys –

-1

var a = {}; 
 
a[1] = 1; 
 
a[4] = 4; 
 
alert(JSON.stringify(a).replace(/\"([0-9]+)\":/g, '$1:'));

しかし、それはその場しのぎです。 JSON - 文字列キーがあります。

+2

正規表現でJSONを解析することはできません。 – Oriol

+1

これは解析していません。それは変換しています。 –

+2

はい、それがポイントです。正しく処理するには、解析してカスタムのストリンガーを使用する必要があります。あなたは[Zalgoが来る](http://stackoverflow.com/a/1732454/1529630)したくないですか? – Oriol

1

私はあなたわかりませんキーが文字列値でなければならないので、あなたがしようとしていることをやり遂げることができます。私はあなたのキーのための文字列名(1 = 1、2 = 2など)を持つことをお勧めします。あなたはこれを試すことができます:

var a = {}; 
    a.one = 1; 
    a.two = 2; 
    a.three = 3; 
    a.four = 4; 

    console.log(JSON.stringify(a)); 

私はこれが役立ちます。

関連する問題