JavaScript JSON Key一覧取得

JSONのKey取得

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()から吐き出されたデータは下になります。

Safari のJavaScriptコンソール画面
Safari のJavaScriptコンソール画面

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)したコードを実行すると下のようになります。

JavaScript 配列のキーからバリュー取り出し
JavaScript 配列のキーからバリュー取り出し

文字列も同じようにObject.keys()が使えます。

Object.keys(文字列)も使えます。
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)

結果は下のようになります。

複数階層 JSONの場合
複数階層 JSONの場合

JavaScript 配列をJSONに変換する

JavaScript Array To JSON

JavaScriptで不定長の配列変数の情報をJSON化するコードです。入力は、[“ドラゴン”, “ライガー”, “ポセイドン”]という配列を入れています。この配列は3つ固定ではなく何個セットしても大丈夫です。DynamoDBなどでExpressionAttributeValuesを設定する場合などに使えそうです。

const arrayToJSON = async(values) => {
    const columnName = ":ColumnName"
    let s = {}
    let i = 0
    values.forEach(aValue => {
        let element1 = columnName + String(++i)
        s[element1] = aValue
    })
    return {"ExpressionAttributeValues":s}
}
Promise.all([arrayToJSON(["ドラゴン", "ライガー", "ポセイドン"])]).then(prmsArr => {
    prmsArr.forEach(jValue => {
        console.log(JSON.stringify(jValue))
        //{"ExpressionAttributeValues":{":ColumnName1":"ドラゴン",":ColumnName2":"ライガー",":ColumnName3":"ポセイドン"}}
    })
})
2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED