Esta es la contestación más acertada que encomtrarás compartir, sin embargo obsérvala detenidamente y valora si se adapta a tu proyecto.
Solución:
- Analizar el JSON
const arr = JSON.parse(json);
- Para cada objeto en el JSON, cambie el nombre del key:
obj.id = obj._id;
delete obj._id;
- Stringifica el resultado
Todos juntos:
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 );
En este caso, sería más fácil de usar. string reemplazar. 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 idiomas, no es tan malo en javascript). En lugar de eso, hazlo;
jsonString = jsonString.replace(""_id":", ""id":");
Como mencionó evanmcdonnal, la solución más fácil es procesar esto como string 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 a string y reemplace “_id” por “id” y luego vuelva a convertirlo al formato JSON requerido. Pero usé split
y join
en vez de replace
, porque replace
reemplazará solo la primera aparición del string.