JavaScriptのJSONには型の概念が無いので引数に渡されたJSONが正しいかなどをキーの有無で判断することが必要な場合があります。JSONはキー・バリューでデータを保持しています。そのJSON変数に特定のキーがあるのかを判断するには、Object.keys()を使います。下記のJSONのキーの一覧を取得する場合
{ "title": "装甲騎兵ボトムズ", "direction": "高橋良輔", "character": "キリコ・キュービィー" }
上記のJSONがあったとして、このデータのキーとバリューを一気に表示するために下記のようなコードです。
const s1 = '{"title": "装甲騎兵ボトムズ","direction": "高橋良輔","character": "キリコ・キュービィー"}' const j1 = JSON.parse(s1) const keyList = Object.keys(j1) for (let k1 in keyList){ console.log(`key=${keyList[k1]} | value=${j1[keyList[k1]]} `) }
Object.keys()を実行すると変数keyListに String[]が入ります。そのkeyListの中は[“0″,”1″,”2”]のようなデータが入ります。console.log()から吐き出されたデータは下になります。
Object.keys()はキー・バリュー構造以外のStringやArrayでも使えます。
const arrInt = [1,2,3] const keyList = Object.keys(arrInt) for (let k1 in keyList){ console.log(`配列[${keyList[k1]}]=${arrInt[keyList[k1]]} `) }
上記のarrInt(Number配列)にObject.keys(arrInt)したコードを実行すると下のようになります。
文字列も同じようにObject.keys()が使えます。
JSONデータが2階層以上ある場合下記のように書くこともできます。
const x1 = { "title": "装甲騎兵ボトムズ", "direction": "高橋良輔", "character": { "main": "キリコ・キュービィー" , "heroine": "フィアナ" } } const f1 = (_x1, _thNum) => { const keyList = Object.keys(_x1) for (let k1 in keyList){ if (Object.prototype.toString.call(_x1[keyList[k1]]) != "[object Object]") { console.log(`layer[${_thNum}] | ${keyList[k1]} | ${_x1[keyList[k1]]} `) } else { f1(_x1[keyList[k1]], _thNum + 1) } } } f1(x1, 1)
結果は下のようになります。