Cómo cambiar el nombre de la clave JSON

Tengo un objeto JSON con el siguiente contenido:

[ { "_id":"5078c3a803ff4197dc81fbfb", "email":"user1@gmail.com", "image":"some_image_url", "name":"Name 1" }, { "_id":"5078c3a803ff4197dc81fbfc", "email":"user2@gmail.com", "image":"some_image_url", "name":"Name 2" } ] 

Quiero cambiar la clave “_id” por “id” para que se convierta

 [ { "id":"5078c3a803ff4197dc81fbfb", "email":"user1@gmail.com", "image":"some_image_url", "name":"Name 1" }, { "id":"5078c3a803ff4197dc81fbfc", "email":"user2@gmail.com", "image":"some_image_url", "name":"Name 2" } ] 

¿Cómo haría eso con Javascript, jQuery o Ruby, Rails?

Gracias.

 var json = '[{"_id":"5078c3a803ff4197dc81fbfb","email":"user1@gmail.com","image":"some_image_url","name":"Name 1"},{"_id":"5078c3a803ff4197dc81fbfc","email":"user2@gmail.com","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":"user1@gmail.com","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.

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\":"); 

Como lo menciona evanmcdonnal , la solución más fácil es procesar esto como una cadena en lugar de JSON,

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

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":"user1@gmail.com","image":"some_image_url","name":"Name 1"},{"_id":"2","email":"user2@gmail.com","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 su objeto se ve así:

 obj = { "_id":"5078c3a803ff4197dc81fbfb", "email":"user1@gmail.com", "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":"user1@gmail.com", "image":"some_image_url", "name":"Name 1" } 

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 } ]