递归更改JSON密钥名称(全部大写)?

Nav*_*eon 7 javascript json

有没有办法将所有JSON密钥名称更改为大写字母?

例如: __CODE__

并需要转换为

__CODE__

谢谢你的建议.

-Navin

Sel*_*gam 17

从你的评论,

例如,像这些将为内部密钥失败{:"约翰","时代":"21","性":"男","地方":"名" {"状态":"CA"}}

您可能需要对此类情况使用递归.见下文,

DEMO

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;
}
Run Code Online (Sandbox Code Playgroud)

产量

在此输入图像描述


一个简单的循环应该可以做到,

DEMO

var output = {};
for (i in obj) {
   output[i.toUpperCase()] = obj[i];
}
Run Code Online (Sandbox Code Playgroud)

  • @Elvis不,我正在创建一个新对象`output` (2认同)

jfr*_*d00 5

您不能直接在给定对象上更改键,但是如果要在原始对象上进行此更改,则可以保存新的大写键并删除旧的键:

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));
Run Code Online (Sandbox Code Playgroud)

仅供参考,此函数还可以防止再次修改继承的可枚举属性或方法。