Изменить имена ключей JSON (на все заглавные) рекурсивно?
есть ли способ изменить все имена ключей JSON на заглавную букву ?
например: {"name":"john","Age":"21","sex":"male","place":{"state":"ca"}}
и должны быть преобразованы как
{"NAME":"john","AGE":"21","SEX":"male","PLACE":{"STATE":"ca"}}
Спасибо в advamnce.
-Нэвин
2 ответов
из вашего комментария,
например, как это произойдет для внутренних ключей {"имя": "Джон","Возраст":"21","пол":"мужчина","место": {"Состояние": "ca"}}
для таких случаев может потребоваться рекурсия. Смотрите ниже
var output = allKeysToUpperCase(obj);
function allKeysToUpperCase(obj) {
var output = {};
for (i in obj) {
if (Object.prototype.toString.apply(obj[i]) === '[object Object]') {
output[i.toUpperCase()] = allKeysToUpperCase(obj[i]);
} else {
output[i.toUpperCase()] = obj[i];
}
}
return output;
}
выход
простой цикл должен сделать трик,
var output = {};
for (i in obj) {
output[i.toUpperCase()] = obj[i];
}
вы не можете изменить ключ непосредственно на данном объекте, но если вы хотите сделать это изменение на исходном объекте, вы можете сохранить новый верхний регистр и удалить старый:
function changeKeysToUpper(obj) {
var key, upKey;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
upKey = key.toUpperCase();
if (upKey !== key) {
obj[upKey] = obj[key];
delete(obj[key]);
}
// recurse
if (typeof obj[upKey] === "object") {
changeKeysToUpper(obj[upKey]);
}
}
}
return obj;
}
var test = {"name": "john", "Age": "21", "sex": "male", "place": {"state": "ca"}, "family": [{child: "bob"}, {child: "jack"}]};
console.log(changeKeysToUpper(test));
FYI, эта функция также защищает снова непреднамеренно изменяя унаследованные перечисляемые свойства или методы.