Простой способ изменения оболочки json-ключей для camelCase от snake_case

65
6

У меня много json-синтаксического анализа, и все json, которые я получаю, имеют ключи в случае с змеей, такие как user_name. И для синтаксического анализа мне нужно это в случае с верблюдом, как userName.

Образец json файла будет выглядеть так:

[{
"user_id" : 1,
"user_name" : "Abcd"
},
{
"org_id" : 11,
"org_name" : "some_name"
}
...
]

Ожидаемый результат:

[{
"userId" : 1,
"userName" : "Abcd"
},
{
"orgId" : 11,
"orgName" : "some_name"
}
...
]

Json, который я получаю, не имеет какой-либо фиксированной нотации, и это может быть что угодно. Но все ключи будут в случае с змеей. И мне нужно преобразовать его в camelCase.

То, что я не могу сделать, это найти и заменить, потому что он также заменяет строки обмоток змеи в значениях.

Есть ли простой способ, который может сделать то же самое?

спросил(а) 2021-01-19T17:24:04+03:00 9 месяцев назад
1
Решение
65

Вы можете сделать следующее:

var keys = [];//this will contain the json with desired output
for(var i = 0;i<myObj.length;i++)//myObj is the variable that contains your json
{
Object.keys(myObj[i]).forEach(function(key){
if(keys.indexOf(key) == -1)
{
var newValue = {};
var value = myObj[i][key];
key = key.replace(/_([a-z])/g, function (g) { return g[1].toUpperCase(); });
newValue[key] = value;
keys.push(newValue);
}
});

}
//console.log(keys);

Надеюсь это поможет :)

ответил(а) 2021-01-19T17:24:04+03:00 9 месяцев назад
65

Вы можете использовать пакет npm: camelcase-keys-deep

https://www.npmjs.com/package/camelcase-keys-deep

ответил(а) 2021-01-19T17:24:04+03:00 9 месяцев назад
46

var arr = [{
"user_id": 1,
"user_name": "Abcd"
},
{
"org_id": 11,
"org_name": "some_name"
}
];

arr.forEach(a => {
Object.keys(a).forEach(k => {
newK = k.replace(/(\_\w)/g, (m) => m[1].toUpperCase());
a[newK] = a[k];
delete a[k];
});
});

console.log(arr);

ответил(а) 2021-01-19T17:24:04+03:00 9 месяцев назад
46

Таким образом, реализация AKSHAY JAIN довольно прочная, но она удалит свойства, которые не находятся в случае с змеей. Я исправил реализацию.

var arr = [{
"user_id": 1,
"user_name": "Abcd"
},
{
"org_id": 11,
"org_name": "some_name"
},
{
"personId": 12,
"personName": "otherName"
}];

arr.forEach(a => {
Object.keys(a).forEach(k => {
newK = k.replace(/(\_\w)/g, (m) => m[1].toUpperCase());
if (newK != k) {
a[newK] = a[k];
delete a[k];
}
});
});

console.log(arr);

ответил(а) 2021-01-19T17:24:04+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема