2012-11-15 14 views
32

ich ein JSON-Objekt mit dem folgenden Inhalt haben:Wie umbenennen JSON Schlüssel

[ 
    { 
    "_id":"5078c3a803ff4197dc81fbfb", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 1" 
    }, 
    { 
    "_id":"5078c3a803ff4197dc81fbfc", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 2" 
    } 
] 

Ich möchte die „_id“ Schlüssel „id“ ändern, damit es

[ 
    { 
    "id":"5078c3a803ff4197dc81fbfb", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 1" 
    }, 
    { 
    "id":"5078c3a803ff4197dc81fbfc", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 2" 
    } 
] 

werden würde Wie würde ich das entweder mit Javascript, jQuery oder Ruby, Rails machen?

Danke.

+3

Analysieren Sie den JSON, modifizieren Sie die resultierende Datenstruktur entsprechend und konvertieren Sie sie zurück in JSON. Zeiger: http://stackoverflow.com/questions/4935632/how-to-parse-json-in-javascript, http://stackoverflow.com/questions/1826727/how-do-i-parse-json-with- ruby-on-rails, http://stackoverflow.com/questions/2295496/convert-javascript-array-to-json, http://stackoverflow.com/questions/3183786/how-to-convert-a-ruby- Hash-Objekt-zu-Json. –

Antwort

62
var json = '[{"_id":"5078c3a803ff4197dc81fbfb","email":"[email protected]","image":"some_image_url","name":"Name 1"},{"_id":"5078c3a803ff4197dc81fbfc","email":"[email protected]","image":"some_image_url","name":"Name 2"}]'; 

var obj = JSON.parse(json)[0]; 
obj.id = obj._id; 
delete obj._id; 

json = JSON.stringify([obj]); 

Dies ändert json zu:

[{"email":"[email protected]","image":"some_image_url","name":"Name 1","id":"5078c3a803ff4197dc81fbfb"}] 

Seit Reihenfolge in einem Name/Wert-Paar in JSON nicht Sinn hat, das ist das gleiche wie das gewünschte Ergebnis ist.

+3

Was ist, wenn ich Änderungen an allen _id in Json anwenden möchte? – truongnm

+1

@truongnm Schleife es –

+0

auch wenn Sie Schlüssel mit Leerzeichen haben möchten, können Sie es wie folgt hinzufügen obj ["meine ID"] = obj.id – catchiecop

21

In diesem Fall wäre es am einfachsten, String ersetzen zu verwenden. Das Serialisieren des JSON funktioniert nicht gut, da _id zum Eigenschaftsnamen des Objekts wird und das Ändern eines Eigenschaftsnamens keine einfache Aufgabe ist (zumindest nicht in den meisten Sprachen, in Javascript ist es nicht so schlecht). Stattdessen tue es einfach;

 jsonString = jsonString.replace("\"_id\":", "\"id\":"); 
10

Wie evanmcdonnal erwähnt, ist die einfachste Lösung, diese als Zeichenfolge anstelle von JSON, zu verarbeiten

var json = [{"_id":"5078c3a803ff4197dc81fbfb","email":"[email protected]","image":"some_image_url","name":"Name 1"},{"_id":"5078c3a803ff4197dc81fbfc","email":"[email protected]","image":"some_image_url","name":"Name 2"}]; 
 
    
 
json = JSON.parse(JSON.stringify(json).split('"_id":').join('"id":')); 
 

 
document.write(JSON.stringify(json));

Dies wird gegeben JSON-Daten in String konvertieren und "_id" auf "ersetzen id "und konvertiert es dann zurück in das erforderliche JSON-Format. Aber ich habe split und join anstelle von replace verwendet, weil replace nur das erste Auftreten der Zeichenfolge ersetzen wird.

+1

Vielen Dank Herr Stranger, es hilft mir wirklich. –

1

Wenn Sie alle Vorkommen eines Schlüssels umbenennen möchten, können Sie eine Regex mit der Option g verwenden. Zum Beispiel:

var json = [{"_id":"1","email":"[email protected]","image":"some_image_url","name":"Name 1"},{"_id":"2","email":"[email protected]","image":"some_image_url","name":"Name 2"}]; 

str = JSON.stringify(json); 

jetzt haben wir die JSON in String-Format in str.

Ersetzen Sie alle Vorkommen von "_id" auf "id" mit regex mit der g Option:

str = str.replace(/\"_id\":/g, "\"id\":"); 

und zurück zum json-Format:

json = JSON.parse(str); 

jetzt haben wir unsere json mit der gewünschte Schlüsselname.

+0

Dies funktioniert nicht, wenn es irgendwo einen Wert gibt, der den Schlüsselnamen enthält, den Sie ersetzen, da er auch diesen ersetzen wird. – Carasel

+0

Guter Punkt aber Randfall. Seien Sie immer vorsichtig beim Ersetzen von Text – rafraph

0

Wenn Sie es dynamisch tun wollen, zum Beispiel, haben Sie ein Array, das Sie als Schlüssel zum JSON-Objekt anwenden möchten:

Ihr Array wird wie:

var keys = ["id", "name","Address","Phone"] // The array size should be same as JSON Object keys size 

Sie jetzt haben ein JSON-Array wie:

var jArray = [ 
    { 
    "_id": 1, 
    "_name": "Asna", 
    "Address": "NY", 
    "Phone": 123 
    }, 
    { 
    "_id": 2, 
    "_name": "Euphoria", 
    "Address": "Monaco", 
    "Phone": 124 
    }, 
    { 
    "_id": 3, 
    "_name": "Ahmed", 
    "Address": "Mumbai", 
    "Phone": 125 
    } 
] 

$.each(jArray ,function(pos,obj){ 
    var counter = 0; 
    $.each(obj,function(key,value){ 
     jArray [pos][keys[counter]] = value; 
     delete jArray [pos][key]; 
     counter++; 
    }) 
}) 

Ihre resultierende JSON Array wird wie:

[ 
    { 
    "id": 1, 
    "name": "Asna", 
    "Address": "NY", 
    "Phone": 123 
    }, 
    { 
    "id": 2, 
    "name": "Euphoria", 
    "Address": "Monaco", 
    "Phone": 124 
    }, 
    { 
    "id": 3, 
    "name": "Ahmed", 
    "Address": "Mumbai", 
    "Phone": 125 
    } 
]