1. ホーム
  2. javascript

[解決済み] JavaScriptでjson-objectのキーを取得する [重複].

2022-07-15 20:57:42

質問

私はJavaScriptでjsonオブジェクトを持っており、その中で使用されているキーを取得したい。私のJavaScriptコードは次のようになります。

var jsonData = [{"person":"me","age":"30"},{"person":"you","age":"25"}];

そして、json-Arrayの最初のオブジェクトのキーである'person'と'age'を警告するループが欲しいのです。

どのように解決するのですか?

[あなたが持っているのはただのオブジェクトであり、"json-object" ではありません。 JSON はテキスト表記です。引用したのは、JavaScriptのコードで 配列の初期化子 オブジェクトのイニシャライザー (別名、オブジェクト・リテラル構文")] があります。

ECMAScript5 の機能が利用可能であることを当てにできるのであれば Object.keys 関数を使用して、オブジェクトのキー(プロパティ名)の配列を取得できます。すべてのモダンブラウザは Object.keys (があります(IE9+を含む)。

Object.keys(jsonData).forEach(function(key) {
    var value = jsonData[key];
    // ...
});


この回答の残りの部分は2011年に書かれたものです。今日の世界では、A) IE8 以前をサポートする必要がない限り、これをポリフィルする必要はありません (!) B) もしそうするなら、自分で書いたり SO の回答から取得した一回限りのものでそれを行うことはありません (そしておそらく 2011 年にはそうすべきでもなかったでしょう)。その場合、おそらくは es5-shim から、またはポリフィルを含むように設定できる Babel のようなトランスパイラ経由で(これは es5-shim ).

2011年の回答の続きです。

古いブラウザにはそれがないことに注意してください。そうでない場合は、これは自分で供給できるもののひとつです。

if (typeof Object.keys !== "function") {
    (function() {
        var hasOwn = Object.prototype.hasOwnProperty;
        Object.keys = Object_keys;
        function Object_keys(obj) {
            var keys = [], name;
            for (name in obj) {
                if (hasOwn.call(obj, name)) {
                    keys.push(name);
                }
            }
            return keys;
        }
    })();
}

これは for..in ループ ( 詳細はこちら ) を使って、オブジェクトが持つすべてのプロパティ名をループしています。 Object.prototype.hasOwnProperty を使用して、プロパティが継承されているのではなく、オブジェクトによって直接所有されていることをチェックします。

(自己実行関数なしでできたかもしれませんが、私は自分の関数が 名前を持つ であること、そして IE と互換性があることが望ましいのです。 は名前付きの関数式は使えません。 ということになります[まあ、よほど注意しなければなりませんが]。そのため、自己実行型関数は、関数宣言がグローバルシンボルを作成するのを避けるために存在します)。