2016-06-27 7 views
1

codiert Ich habe dies:Konvertieren JavaScript-Objekt Schlüssel zum echten int nach JSON

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

dann bekomme ich:

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

aber ich möchte bekommen:

{1:1,4:4} 

, wie man erreichst du das? Mit anderen Worten, ich möchte Schlüssel int real sein.

+5

Objektschlüssel sind _always_ Strings. So etwas gibt es nicht. – SLaks

+2

... und daher ist das letzte Codebeispiel ungültig JSON. –

+0

jetzt Weg in Array zu konvertieren? –

Antwort

3

Beim Aufrufen der JSON.stringify() -Methode wird eine gültige JSON-Zeichenfolge erstellt. Eine der Regeln für gültige JSON ist, dass jede Eigenschaft in "Anführungszeichen" sein sollte.

Deshalb ist es unmöglich, mit JSON.stringify das gewünschte Ergebnis zu erhalten.

Wenn Sie nur ein solches Objekt in ein Array konvertieren möchten, ist es beispielsweise möglich, eine solche Funktion zu verwenden.

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] 

Aber auf diese Weise erhalten Sie nur Array mit Werten der vorhandenen Eigenschaften in der Obj.

Aber wenn Ihr prop Name des Index im Array bedeutet, und Sie sind sicher, dass es als Stütze Name immer die Nummer sein wird - diese Funktion verbessern können:

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

Ja, ich sehe, ich erkannte, dass es ein serverseitiges Problem ist: http://StackOverflow.com/Questions/3445953/How-Can-I-Force-PHP-To-use-String-For-Array-Tkeys –

-1

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

Aber es ist Flickschusterei. JSON - hat eine Zeichenkette.

+2

Sie können JSON mit Regex nicht analysieren. – Oriol

+1

es wird nicht analysiert. Es wandelt um. –

+2

Ja, das ist der Punkt. Um es richtig zu machen, müssen Sie es analysieren und dann einen benutzerdefinierten String verwenden. Du willst nicht [Zalgo kommt] (http://stackoverflow.com/a/1732454/1529630), oder? – Oriol

1

ich nicht sicher bin, kann tun, was du versuchst zu tun, da die Schlüssel Stringwerte sein müssen. Ich würde empfehlen, String-Namen für Ihre Schlüssel (d. H. 1 = Eins, 2 = Zwei usw.). Sie könnten dann folgendes versuchen:

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

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

Ich hoffe, das hilft.