Как переименовать ключ 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":"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?

Благодарю.

 Felix Kling15 нояб. 2012 г., 05:29
Разобрать JSON, соответствующим образом изменить полученную структуру данных и преобразовать ее обратно в JSON. указатели:stackoverflow.com/questions/4935632/...,stackoverflow.com/questions/1826727/...,stackoverflow.com/questions/2295496/...,stackoverflow.com/questions/3183786/....

Ответы на вопрос(6)

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

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

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

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

Если вы хотите переименоватьвсе случаи некоторых ключей вы можете использовать регулярное выражение с опцией 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 в формате строки в ул.

Заменить все вхождения "_Я бы" к "Я бы" используя регулярное выражение с г опция:

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

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

json = JSON.parse(str);

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

 Carasel30 нояб. 2017 г., 12:42
Это победилоt работает, если где-нибудь есть значение, содержащее заменяемое вами имя ключа, так как оно также заменит его.
 RefaelJan30 нояб. 2017 г., 14:04
Хороший вопрос, но крайний случай. Всегда нужно быть осторожным при замене текста
Решение Вопроса
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, это то же самое, что и желаемый результат.

 truongnm11 июн. 2016 г., 04:24
Что если я хочу применить изменения ко всем _id в json?
 catchiecop06 апр. 2017 г., 11:47
также, если вы хотите иметь ключи с пробелами, вы можете добавить их как этот объект ["мой ID"] = obj.id
 Viswanath Lekshmanan04 апр. 2017 г., 07:09
@truongnm сделай это

Если вы хотите сделать это динамически, например, у вас есть массив, который вы хотите применить в качестве ключа к объекту 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
  }
]

Как упомянуто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));

Это преобразует данные JSON в строку и заменяет_Я бы" к "Я бы" затем преобразовать его обратно в требуемый формат JSON. Но я использовалsplit а такжеjoin вместоreplace, так какreplace заменит только первое вхождение строки.

 Chetan S. Choudhary06 янв. 2017 г., 11:00
Большое спасибо, мистер Незнакомец, это действительно помогает мне.

Ваш ответ на вопрос