Как переименовать ключ 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?
Спасибо.
Ответы
Ответ 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);