name - Cómo cambiar el nombre de la clave JSON
javascript change property name (6)
Tengo un objeto JSON con el siguiente contenido:
[
{
"_id":"5078c3a803ff4197dc81fbfb",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 1"
},
{
"_id":"5078c3a803ff4197dc81fbfc",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 2"
}
]
Quiero cambiar la clave "_id" por "id" para que se convierta
[
{
"id":"5078c3a803ff4197dc81fbfb",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 1"
},
{
"id":"5078c3a803ff4197dc81fbfc",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 2"
}
]
¿Cómo haría eso con Javascript, jQuery o Ruby, Rails?
Gracias.
Como lo menciona , la solución más fácil es procesar esto como una cadena en lugar de JSON,
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));
Esto convertirá los datos JSON dados en una cadena y reemplazará "_id" por "id" y luego los convertirá nuevamente al formato JSON requerido. Pero utilicé split
y join
lugar de replace
, porque replace
reemplazará solo la primera aparición de la cadena.
En este caso, sería más fácil usar string replace. Serializar el JSON no funcionará bien porque _id se convertirá en el nombre de propiedad del objeto y cambiar el nombre de una propiedad no es una tarea sencilla (al menos no en la mayoría de los langauges, no es tan malo en javascript). En cambio solo hazlo;
jsonString = jsonString.replace("/"_id/":", "/"id/":");
Si desea cambiar el nombre de todas las apariciones de alguna clave, puede usar una expresión regular con la opción g. Por ejemplo:
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);
ahora tenemos el json en formato de cadena en str.
Reemplaza todas las ocurrencias de "_id" por "id" usando regex con la opción g :
str = str.replace(//"_id/":/g, "/"id/":");
y regresar al formato json:
json = JSON.parse(str);
ahora tenemos nuestro json con el nombre de la clave deseada.
Si desea hacerlo de forma dinámica, por ejemplo, tiene una matriz que desea aplicar como clave al objeto JSON:
tu Array será como:
var keys = ["id", "name","Address","Phone"] // The array size should be same as JSON Object keys size
Ahora tienes una matriz JSON como:
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++;
})
})
Su matriz JSON resultante será como:
[
{
"id": 1,
"name": "Asna",
"Address": "NY",
"Phone": 123
},
{
"id": 2,
"name": "Euphoria",
"Address": "Monaco",
"Phone": 124
},
{
"id": 3,
"name": "Ahmed",
"Address": "Mumbai",
"Phone": 125
}
]
Si su objeto se ve así:
obj = {
"_id":"5078c3a803ff4197dc81fbfb",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 1"
}
Probablemente el método más simple en JavaScript es:
obj.id = obj._id
del object[''_id'']
Como resultado, obtendrá:
obj = {
"id":"5078c3a803ff4197dc81fbfb",
"email":"[email protected]",
"image":"some_image_url",
"name":"Name 1"
}
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]);
Esto cambia json a:
[{"email":"[email protected]","image":"some_image_url","name":"Name 1","id":"5078c3a803ff4197dc81fbfb"}]
Dado que el orden no tiene significado en un par nombre / valor en JSON, este es el mismo que el resultado deseado.