JSONフォーマットが便利すぎて日々鼻血が出そうになります。
テキストデータとしては、csvやxmlなどが使われる場合が多いのですが、jsonフォーマットはとにかく利便性が高く、使いやすい為、Web-APIなどで利用しているサイトも増えてきました。
ただし、それぞれのフォーマットにはそれなりのメリットもあるので、そうした点を理解した上でjsonを使う判断をしないと、結果オーライにならないケースもあるようですよ。
元々Javascriptで扱うデータフォーマットだったJSONですが、key=valueというシンプル構成がWEBクエリや、連想配列と合わせて使う時に違和感なく使えることから、使いやすいんだと思います。
そんなjsonフォーマットは、文字列の状態と連想配列の状態をそれぞれ変換する時に、JSON関数のparseとstringifyメソッドを使いますが、stringifyメソッドで文字列変換する際に、データのコントロールができるので、より便利に使える方法を説明します。
それぞれのフォーマット毎のメリットを考える
csv
エクセルから出力できる2軸のシンプルフォーマット。
テキストフォーマットで扱う中で最もデータ容量が少なくなるので、サーバーにおけるデータログなどで使う場合も多いでしょう。
xml
namespaceを使ったセキュアなデータ管理や
HTMLからの上位バージョンとしてDOM構造という扱いはWEBデータとしては優位点でしょう。
Androidの基本設定やRSSなどのデータとして使われていますが、金融庁のXBRLフォーマットもXML形式で構成されています。
それぞれのタグに対して属性が持てる点から、情報量の多いデータをコンパクトに格納できますが、扱い方も複雑であり、データ容量も最も大きくなってしまいます。
json
javascriptの連想配列をそのまま文字列化したものがjsonフォーマットですが、javascriptのObjectとの違いはfunctionが持てないという点ですかね。
連想配列と文字列を変換するタイミングについて考える
文字列にするのは、データとしてファイルやDBに書き出す時に、文字列にする必要があります。
そんな場合は、迷わず
var data = {a:1,b:2,c:3};
var json = JSON.stringify(data);
これで、ObjectからStringに切り替わり、URLクエリで送付したり、テキストに書き出す事が可能になります。
逆に、受け取ったJSONフォーマットを連想配列に変換したければ、
var text = "{a:1,b:2,c:3}";
var data = JSON.parse(text);
これだけでデータフォーマットにエラーがなければ、すんなり連想配列化されます。
JSON.stringifyを上手に扱う方法
上記のJSONデータを文字列化する操作を下記の様にするだけで、出力文字列が整形されます。
var data = {a:1,b:2,c:3};
var json = JSON.stringify(data , null , " ");
"{ a : 1 , b : 2 , c : 3 }"
第3要素の" "部分は、インデントを指定していますが、第2要素の null って中のデータを何もせずにスルーしている状態です。
ここに関数を書く事でデータコントロールが可能になります。
例えば、データのvalue値を全て数値から文字列に変換するには、以下の様に書きます。
var data = {a:1,b:2,c:3};
var json = JSON.stringify(data ,function(key,value){
if(key){
return String(value);
}
else{
return value;
}
} , " ");
"{ "a": "1" , "b": "2" , "c": "3"}"
keyとvalueを理解でしていれば、値をコントロールする事が容易にできる事がわかると思います。
ちなみに、このfunctionでは、keyが3つ存在するのですが、実質4回のloopが発生してしまいます。
大元の {} 部分のObject要素もここに送られてくるので、keyがない場合または、valueが"object"の場合は、そのままvalueを返すのがセオリーの様です。
この方式を使うと決まった階層やkey値に対してのデータフォーマットのコントロールや、受け取ったデータの合計値を求めたりすることも可能になります。
他にも任意の文字列変更や、データ削除などを行なって整形することもできることを考えると、受け取ったデータがエラーになる確率を下げる事ができそうですね。
ちなみに、僕が以前書いたブログで、自力で作ったjsonデータの文字列化ツールですが、こちらは、functionも格納できるようになるので、とても便利ですよ・・・という宣伝
[JavaScript] JSONデータを文字列に変換する
0 件のコメント:
コメントを投稿