JSONの使い方

JavaScriptでは、よくJSON形式のデータを活用するケースがあります。AJAXを使ってサーバ側からレスポンスする際や、外部連携する等によく使っています。慣れてくると大変便利なので、多用してしまいがちですが、なんでもかんでもJSON形式とすると、自由度が高い分、視覚的にソースがわかりにくくなりますし、中の要素を変更する際に、その他の要素に思わぬ影響を与える事があります。特によく障害となるケースが、配列と単純なオブジェクトの差です。配列形式ではないJSONに配列のJSONをpushしてしまって、後から正しく取得できない。といった事が経験としてたまにあります。

基本的な使い方を掲載します。

  • JSON形式の定義

構成はKEY:VALUEとなり、オブジェクトの場合は{}で囲い、配列の場合は[]で囲います。

// 1レコード(配列でない)場合
var data1 = {cd : 100,name : "test1"};

// 配列形式の複数レコードの場合
var data2 = [
  { cd : 100, name : "test1"},
  { cd : 101, name : "test2"},
  { cd : 102, name : "test3"}
];

// KEY形式の場合
var data3 = {
    100: {
        cd: '100',
        name: 'test1'
    },
    200: {
        cd: '101',
        name: 'test2'
    },
    300: {
        cd: '102',
        name: 'test2'
    }
};

// 内容を確認

// 要素取得
console.log(data1.cd+","+data1.name);

// 配列の件数分、取得
for (var i = 0; i < data2.length; i++) {
    console.log(data2[i].cd+","+data2[i].name);
}

// KEYの取得
for (var keyData in data3) {
    console.log(keyData);
}

// 該当KEYの要素取得
for (var keyData in data3) {
    console.log(data3[keyData]);
}
  • JSONオブジェクトの追加

JSONの配列型オブジェクトに、配列要素を追加したい場合は、以下のようにpushを使います。

var putData = { cd : 103, name : "test3" };

data2.push(putData);
  • JSONオブジェクトの抽出

JSONの配列型オブジェクトより、対象のKEYに該当する配列データを抽出したい場合がよくあります。この場合は、filterを使って、その中で該当するデータのみを返すようにしています。

// cdが100または101のJSONデータを取得
var getList = data2.filter(function(itemData, index){
  if (itemData.cd == 100 || itemData.cd == 101) return true;
});

// 対象のJSONデータ配列の要素を出力
for (var i = 0; i < getList.length; i++) {
    console.log(getList[i].cd+","+getList[i].name);
}
  • JSON配列の並び替え(ソート)

JSONの配列型オブジェクトの場合、よく並び替えが必要となるケースがあります。この場合は、JavaScriptは、配列にsort機能があるので、それを使っています。sort関数は、引数で比較する為のfunctionを指定できますので、これで並び替えの対象となるKEY項目の判定を指定します。

// 並び替え条件比較処理(cd昇順)
function comp(item1,item2){
    var rtn = 0;
    if(item1.cd < item2.cd ) {
        rtn = -1;
    }
    else if(item1.cd > item2.cd) {
        rtn = 1;
    }
    return rtn;
}

// 対象のJSON配列オブジェクトのsotr機能で並び替え
data2.sort(comp);

// 並び替え後の配列の値を取得
for (var i = 0; i < data2.length; i++) {
    console.log(data2[i].cd+","+data2[i].name);
}

※上記のsortで、その他の言語をしていると、私は違和感があるのですが、左辺の並び替え後の配列がありません。つまりdata2 = data.sort();とする必要がありません。これはsort関数が、指定された配列そのものを並び替える事にあります。