7

すべての JSON キー名を大文字に変更する方法はありますか?

例えば:

{"name":"john","Age":"21","sex":"male","place":{"state":"ca"}}

として変換する必要があります

{"NAME":"john","AGE":"21","SEX":"male","PLACE":{"STATE":"ca"}}
4

2 に答える 2

17

あなたのコメントから、

たとえば、これらは内部キー {"name":"john","Age":"21","sex":"male","place":{"state":"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];
}
于 2012-04-17T18:20:25.770 に答える
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));

参考までに、この関数は、継承された列挙可能なプロパティまたはメソッドを誤って変更することも保護します。

于 2012-04-17T18:34:36.833 に答える