property name how change json

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.