AJAXなどで取得するJSONデータをJavaScriptで読み込んでデータ順に処理をしようとしても、読込んだJSONデータはオブジェクトに変換されるので順番通りに処理をしようとしてもうまくいかないことがあります。
このJSON形式のデータを順番通りに処理するのに良いライブラリがあればと思ったのですがないようです。仮にあったとしてもよく考えるとJSONでは、オブジェクト記法や連想配列など混ざっている場合もあるのでデータに合わせて作成するほうが良いんじゃないかと。
例えば、$.getJSONでJSONデータを読み込んで$.eachで処理を使用とすると、読込んだJSONデータは、オブジェクトに変換されるので順番が保証されず意図した結果を得られないということがあります。
特に連想配列でいう所のキーに当たる部分が数値であったり、文字であったりしてそれらが混ざっていると順番通りにならないので、JSONデータを順番通りに処理するには、JSONデータをテキストとして取得して処理するのが良いんじゃないかと思います。
順番通りにJSONを処理する例
JSONデータ1
{"年":"売上","2008":"90","2009":"60","2010":"50","2011":"120"}
例えば、上記のように対になっているJSON形式のデータを[Array[2], Array[2], Array[2]]の配列にする場合、$.getJSONなどを使うと順番通りにならないのでテキストとして取得して、良いコードではないんですが下のようなコードで出来ます。
var JSONData = []; var vals = $('#dataJson').val(); //jsonデータ取得 vals = vals.slice(1,vals.length-1); vals = vals.split(','); for(var i = 0; i < vals.length; i++) { vals[i] = vals[i].slice(1,vals[i].length-1); vals[i] = vals[i].replace('\"', ''); vals[i] = vals[i].replace('\"', ''); vals[i] = vals[i].split(':') for(var j = 0; j < vals[i].length; j++) { if(i != 0) { vals[i][j] = (vals[i][j] / 1); } } JSONData.push(vals[i]); }
JSONデータ2
{ "都道府県":["人口1","人口2"], "東京":["13159388","3159388"], "大阪":["8865245","865245"], "神奈川":["9048331","048331"], "愛知":["7410719","410719"], "福岡":["5071968","071968"], "北海道":["5506419","506419"], "埼玉":["7194556","194556"] }
上のJSON形式のデータを処理する場合について、取得したJSONデータが順番通りの場合、$.eachを使うと便利です。下のコードは、配列の長さが違うときでも配列に格納していくコードになります。
var JsonData = []; $.getJSON('jyunban.json') .done(function(data) { var arrayData = []; $.each(data, function(k, v) { arrayData.push(k); if(v instanceof Array) { v = Array.prototype.slice.call(v, 0); arrayData.push(v); } else { v = v.split(':'); for(var i = 0; i < v.length; i++) { if(v.length == 1) { arrayData.push(v[0]); } else { arrayData.push(v); } } } JsonData.push(arrayData.concat()); }); });
スポンサーリンク
コメント