Подтвердить что ты не робот

Как переименовать ключ JSON

У меня есть объект 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"
  }
]

Я хочу изменить ключ "_id" на "id", чтобы он стал

[
  {
    "id":"5078c3a803ff4197dc81fbfb",
    "email":"[email protected]",
    "image":"some_image_url",
    "name":"Name 1"
  },
  {
    "id":"5078c3a803ff4197dc81fbfc",
    "email":"[email protected]",
    "image":"some_image_url",
    "name":"Name 2"
  }
]

Как мне сделать это с помощью Javascript, jQuery или Ruby, Rails?

Спасибо.

4b9b3361

Ответ 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]);

Это изменяет json на:

[{"email":"[email protected]","image":"some_image_url","name":"Name 1","id":"5078c3a803ff4197dc81fbfb"}]

Так как порядок не имеет значения в паре имя/значение в JSON, это то же самое, что и ваш желаемый результат.

Ответ 2

В этом случае было бы проще всего использовать замену строки. Сериализация JSON не будет работать хорошо, потому что _id станет именем свойства объекта, а изменение имени свойства - непростая задача (по крайней мере, не в большинстве языков, это не так уж плохо в javascript). Вместо этого просто делай;

jsonString = jsonString.replace("\"_id\":", "\"id\":");

Ответ 3

Как упоминалось evanmcdonnal, самым простым решением является обработка этого как строки вместо 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));

Ответ 4

Если вы хотите переименовать все вхождения некоторого ключа, вы можете использовать регулярное выражение с опцией g. Например:

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

теперь у нас есть json в строковом формате на странице.

Замените все вхождения "_id" на "id" с помощью regex с опцией g:

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

и вернуться в формат json:

json = JSON.parse(str);

теперь у нас есть наш json с желаемым именем ключа.

Ответ 5

Если ваш объект выглядит так:

obj = {
    "_id":"5078c3a803ff4197dc81fbfb",
    "email":"[email protected]",
    "image":"some_image_url",
    "name":"Name 1"
   }

Вероятно, самый простой метод в JavaScript:

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

В результате вы получите:

obj = {
    "id":"5078c3a803ff4197dc81fbfb",
    "email":"[email protected]",
    "image":"some_image_url",
    "name":"Name 1"
   }

Ответ 6

Если вы хотите сделать это динамически, например, у вас есть массив, который вы хотите применить в качестве ключа к объекту JSON:

ваш массив будет выглядеть так:

var keys = ["id", "name","Address","Phone"] // The array size should be same as JSON Object keys size

Теперь у вас есть JSON Array:

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

Ваш результирующий массив JSON будет выглядеть так:

[
  {
    "id": 1,
    "name": "Asna",
    "Address": "NY",
    "Phone": 123
  },
  {
    "id": 2,
    "name": "Euphoria",
    "Address": "Monaco",
    "Phone": 124
  },
  {
    "id": 3,
    "name": "Ahmed",
    "Address": "Mumbai",
    "Phone": 125
  }
]

Ответ 7

Возможно, используя typeScript

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

Пример: https://codepen.io/lelogualda/pen/BeNwWJ

Ответ 8

С помощью функции карты вы можете сделать это. Пожалуйста, обратитесь ниже код.

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

Ответ 9

Попробуй это:

let jsonArr = [
    {
        "_id":"5078c3a803ff4197dc81fbfb",
        "email":"[email protected]",
        "image":"some_image_url",
        "name":"Name 1"
    },
    {
        "_id":"5078c3a803ff4197dc81fbfc",
        "email":"[email protected]",
        "image":"some_image_url",
        "name":"Name 2"
    }
]

let idModified = jsonArr.map(
    obj => {
        return {
            "id" : obj._id,
            "email":obj.email,
            "image":obj.image,
            "name":obj.name
        }
    }
);
console.log(idModified);