92 votes

Comment renommer une clé JSON

J'ai un objet JSON avec le contenu suivant :

[
  {
    "_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"
  }
]

Je veux changer la clé "_id" en "id" pour qu'elle devienne

[
  {
    "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"
  }
]

Comment pourrais-je faire ça avec Javascript, jQuery ou Ruby, Rails ?

Gracias.

6voto

rafraph Points 47

Si vous voulez renommer toutes les occurrences d'une certaine clé, vous pouvez utiliser une expression rationnelle avec l'option g. Par exemple :

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);

maintenant nous avons le json en format string dans str.

Remplacer toutes les occurrences de "_id" par "id" à l'aide d'une expression rationnelle avec l'attribut g option :

str = str.replace(/\"_id\":/g, "\"id\":");

et revenir au format json :

json = JSON.parse(str);

maintenant nous avons notre json avec le nom de la clé recherchée.

4voto

Jitendra Pawar Points 781

Vous pouvez le faire en utilisant la fonction map. Veuillez vous référer au code ci-dessous.

var userDetails = [{
  "_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 formattedUserDetails = userDetails.map(({ _id:id, email, image, name }) => ({
  id,
  email,
  image,
  name
}));
console.log(formattedUserDetails);

3voto

trojek Points 676

Si votre objet ressemble à ça :

obj = {
    "_id":"5078c3a803ff4197dc81fbfb",
    "email":"user1@gmail.com",
    "image":"some_image_url",
    "name":"Name 1"
   }

La méthode la plus simple en JavaScript est probablement la suivante :

obj.id = obj._id
del object['_id']

En conséquence, vous obtiendrez :

obj = {
    "id":"5078c3a803ff4197dc81fbfb",
    "email":"user1@gmail.com",
    "image":"some_image_url",
    "name":"Name 1"
   }

3voto

Aurelio Gualda Points 39

C'est possible, en utilisant typeScript

function renameJson(json,oldkey,newkey) {    
 return Object.keys(json).reduce((s,item) => 
      item == oldkey ? ({...s,[newkey]:json[oldkey]}) : ({...s,[item]:json[item]}),{})   
}

Exemple : https://codepen.io/lelogualda/pen/BeNwWJ

2voto

LukeVenter Points 305

Si quelqu'un a besoin de faire cela dynamiquement :

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 aura maintenant les nouvelles clés.

IMPORTANT :

Si votre clé n'est pas modifiée par le replace elle va juste le sortir du tableau. Vous pourriez vouloir mettre des if déclarations là-dedans.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X