JSON.stringifyを使ってJSONフォーマットのコントロール

2019/01/01

Javascript テクノロジー プログラミング

t f B! P L
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データを文字列に変換する

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ