Ich habe ein JSON-Objekt mit folgendem Inhalt:
[
{
"_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 den Schlüssel "_id" in "id" ändern, damit er wird
[
{
"id":"5078c3a803ff4197dc81fbfb",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 1"
},
{
"id":"5078c3a803ff4197dc81fbfc",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 2"
}
]
Wie würde ich das entweder mit Javascript, jQuery oder Ruby, Rails machen?
Vielen Dank.
Antworten:
const arr = JSON.parse(json);
obj.id = obj._id; delete obj._id;
Alle zusammen:
function renameKey ( obj, oldKey, newKey ) { obj[newKey] = obj[oldKey]; delete obj[oldKey]; } const 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" } ] `; const arr = JSON.parse(json); arr.forEach( obj => renameKey( obj, '_id', 'id' ) ); const updatedJson = JSON.stringify( arr ); console.log( updatedJson );
quelle
In diesem Fall ist es am einfachsten, String Replace 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, es ist in Javascript nicht so schlecht). Stattdessen einfach tun;
jsonString = jsonString.replace("\"_id\":", "\"id\":");
quelle
"whereToFindIdentification":"id"
? Es ist nie der beste Weg.Wie von evanmcdonnal erwähnt , besteht die einfachste Lösung darin, dies 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));
Dadurch werden die angegebenen JSON-Daten in Zeichenfolgen konvertiert und "_id" in "id" ersetzt. Anschließend werden sie wieder in das erforderliche JSON-Format konvertiert. Aber ich habe
split
undjoin
stattdessen verwendetreplace
, weilreplace
nur das erste Vorkommen der Zeichenfolge ersetzt wird.quelle
Versuche dies:
let jsonArr = [ { "_id":"5078c3a803ff4197dc81fbfb", "email":"[email protected]", "image":"some_image_url", "name":"Name 1" }, { "_id":"5078c3a803ff4197dc81fbfc", "email":"[email protected]", "image":"some_image_url", "name":"Name 2" } ] let idModified = jsonArr.map( obj => { return { "id" : obj._id, "email":obj.email, "image":obj.image, "name":obj.name } } ); console.log(idModified);
quelle
Wenn Sie alle Vorkommen eines Schlüssels umbenennen möchten, können Sie einen regulären Ausdruck 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 den json im string format in str.
Ersetzen Sie alle Vorkommen von "_id" durch Regex durch "id" durch die Option g :
str = str.replace(/\"_id\":/g, "\"id\":");
und kehren Sie zum JSON-Format zurück:
json = JSON.parse(str);
Jetzt haben wir unseren JSON mit dem gewünschten Schlüsselnamen.
quelle
Ist mit typeScript möglich
function renameJson(json,oldkey,newkey) { return Object.keys(json).reduce((s,item) => item == oldkey ? ({...s,[newkey]:json[oldkey]}) : ({...s,[item]:json[item]}),{}) }
Beispiel: https://codepen.io/lelogualda/pen/BeNwWJ
quelle
JSON.parse
hat zwei Parameter. Der zweite Parameter, reviver, ist eine Transformationsfunktion, die als gewünschtes Ausgabeformat formatiert werden kann. Siehe ECMA-Spezifikation hier .In der Reviver-Funktion:
this
ist das Objekt, das die Eigenschaft enthält, die als diese Funktion verarbeitet wird, und der Eigenschaftsname als Zeichenfolge, der Eigenschaftswert als Argumente dieser Funktion.const 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"}]'; const obj = JSON.parse(json, function(k, v) { if (k === "_id") { this.id = v; return; # if return undefined, orignal property will be removed } return v; }); const res = JSON.stringify(obj); console.log(res)
Ausgabe:
[{"email":"[email protected]","image":"some_image_url","name":"Name 1","id":"5078c3a803ff4197dc81fbfb"},{"email":"[email protected]","image":"some_image_url","name":"Name 2","id":"5078c3a803ff4197dc81fbfc"}]
quelle
Wenn Ihr Objekt so aussieht:
obj = { "_id":"5078c3a803ff4197dc81fbfb", "email":"[email protected]", "image":"some_image_url", "name":"Name 1" }
Die wahrscheinlich einfachste Methode in JavaScript ist:
obj.id = obj._id del object['_id']
Als Ergebnis erhalten Sie:
obj = { "id":"5078c3a803ff4197dc81fbfb", "email":"[email protected]", "image":"some_image_url", "name":"Name 1" }
quelle
Mit der Kartenfunktion können Sie das tun. Bitte beziehen Sie sich auf den folgenden Code.
var userDetails = [{ "_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 formattedUserDetails = userDetails.map(({ _id:id, email, image, name }) => ({ id, email, image, name })); console.log(formattedUserDetails);
quelle
Wenn jemand dies dynamisch tun muss:
const keys = Object.keys(jsonObject); keys.forEach((key) => { // CREATE A NEW KEY HERE var newKey = key.replace(' ', '_'); jsonObject[newKey] = jsonObject[key]; delete jsonObject[key]; });
jsonObject
wird jetzt die neuen Schlüssel haben.WICHTIG:
Wenn Ihr Schlüssel von der
replace
Funktion nicht geändert wird , wird er einfach aus dem Array entfernt. Vielleicht möchten Sie dort einigeif
Aussagen einfügen.quelle
Wenn Sie dies beispielsweise dynamisch ausführen möchten, verfügen Sie über ein Array, das Sie als Schlüssel auf das JSON-Objekt anwenden möchten:
Ihr Array wird wie folgt aussehen:
var keys = ["id", "name","Address","Phone"] // The array size should be same as JSON Object keys size
Jetzt haben Sie 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++; }) })
Ihr resultierendes JSON-Array sieht folgendermaßen aus:
[ { "id": 1, "name": "Asna", "Address": "NY", "Phone": 123 }, { "id": 2, "name": "Euphoria", "Address": "Monaco", "Phone": 124 }, { "id": 3, "name": "Ahmed", "Address": "Mumbai", "Phone": 125 } ]
quelle