JavaでJSONを作成しよう!
JSONとは何か
JSONとは Javascript Object Notation の略で、XMLなどと同様のテキストベースのデータフォーマットです。 名前の通り、JSONはJavascriptのオブジェクト表記構文の一部分となっており、XMLやその他のJava等のプログラム言語と比べると簡潔に構造化されたデータを記述することができるため、人間が理解しやすいような簡単な表記が可能なデータフォーマットになっています。 TwitterやGoogle、Facebookなどのインターネット上のサービスや、企業システム間でのデータのやり取りで大変よく使用されています。
---------------------------------------------------------------------------------------------------------------------------
<students>
<student>
<stdid>0001</stdid>
<department>文学部</department>
<name>田中 太郎</name>
</student>
</students>
---------------------------------------------------------------------------------------------------------------------------
上記のXMLではすべての情報をタグで囲み、テキストノードとして記述していますが、XMLでデータを表現する場合、属性とテキストノードの使い分けが必要になります。
---------------------------------------------------------------------------------------------------------------------------[
{
"stdid":"0001",
"department":"文学部",
"name":"田中 太郎",
}
]
---------------------------------------------------------------------------------------------------------------------------
JSONの場合、そのようなことを気にする必要はありません。また、XMLには閉じ括弧(閉じタグ)が必要ですが、JSONの場合は括弧に対応する閉じ括弧以外は不要になります。XMLと比べると文字数も少なく、きちんとインデントで区切っておけば可読性も高いことがわかります。
では、Javaと比較してみるとどうでしょうか。
---------------------------------------------------------------------------------------------------------------------------[
{
"stdid":"0001",
"department":"文学部",
"name":"田中 太郎",
}
]
---------------------------------------------------------------------------------------------------------------------------
JSONは、Javaのクラス宣言と似ているところが多くあります。 似たようなJavaのクラスとそのインスタンスを作成して、見比べてみましょう。
---------------------------------------------------------------------------------------------------------------------------
public class Student {
public int stdid;
public String department;
public String name;
}
---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
class StudentSample{
public static void main(String[] args){
Student s = new Student();
s.stdid = 0001;
s.department = "文学部";
s.name = "田中 太郎";
}
}
---------------------------------------------------------------------------------------------------------------------------
JSONとJavaの二つを見比べてみると、JSONの「{~~~~}」でくくられた部分がJavaでいうインスタンスで、「"aaaa" : bbbb」が、Javaでのインスタンスフィールドの名前と値のことだと察しがついたかと思います。 "aaaa"のことをプロパティの「キー」、bbbbをプロパティの「値」を一般的に呼んでいます。
JavaでJSONを作成してみる
では、早速ですがJavaでJSONデータを作成してみましょう。 JavaでJSONデータを作成する場合は、JSONObjectクラスで作成することができます。 putメソッドを使い、第一変数のキー、第二変数に値を入れます。
---------------------------------------------------------------------------------------------------------------------------JSONObject json = new JSONObject();
json.put("stdid",0001);
json.put("department","文学部");
json.put("name","田中 太郎");
---------------------------------------------------------------------------------------------------------------------------
こう記述することで、
---------------------------------------------------------------------------------------------------------------------------{
"stdid":0001,
"department":"文学部",
"name":"田中 太郎"
}
---------------------------------------------------------------------------------------------------------------------------
というようなJSONデータが作成できます。
JSONObjectの活用
JSONObjectには外部ライブラリがあり、選択肢として以下の2つがあります。
・net.sf.json.JSONObject
・org.json.JSONObject
「net.sf.json.JSONObject」を使用する場合、「org.json.JSONObject」と比べて複数の外部ライブラリを参照しなければならないので、後者がしばしば使用されている場面を見かけます。 これらの外部ライブラリをダウンロードし、対象のプロジェクトにクラスパスを設定するだけで使用することができます。
実際のサンプルソースコードは以下になります。
---------------------------------------------------------------------------------------------------------------------------import java.io.BufferedWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.json.JSONObject;
public class Test {
public static void main(String[] args) {
JSONObject json = new JSONObject();
json.put( "from", "shima" );
json.put( "age", 30 );
json.put( "male", true );
String[] code = {"java", "javascript", "php"};
json.put( "programming", code );
String fileName = "sample.json";
try ( BufferedWriter writer = Files.newBufferedWriter ( Paths.get( fileName ) ) ) {
json.write( writer );
} catch ( Exception e ) {
System.err.println( e.getMessage() );
}
}
}
---------------------------------------------------------------------------------------------------------------------------
実行後、sample.jsonというファイルが作成されます。
---------------------------------------------------------------------------------------------------------------------------
{"from":"shima","programming":["java","javascript","php"],"age":30,"male":true}
---------------------------------------------------------------------------------------------------------------------------
まとめ
・他のプログラム言語と比べると簡潔に構造化されたデータを記述することができる・JavaでJSONデータを作成する場合は、JSONObjectクラスで作成することができる
・JSONObjectには外部ライブラリがあり、選択肢として以下の2つがある
1. 「net.sf.json.JSONObject」
2. 「org.json.JSONObject」
いかがでしたでしょうか。JSONはTwitterやGoogle、Facebookなどのインターネット上のサービスや、企業システム間でのデータのやり取りで大変よく使用されており、汎用性の高いフォーマットとして認知度も非常に高いです。
今回ご説明したJavaでのJSONデータ作成はもちろん、Web系のプログラム言語であるJavascriptとも親和性が高く、Javascriptを用いた技術であるAjaxでのデータ交換フォーマットとして広く利用されています。このようにXMLの代わりとしてJSONが使用されており、簡潔なJSONを用いることで通信時のデータ量を削減できるなどのメリットが存在します。
また、Java以外のプログラム言語にもJSONの生成や読み込みを行うライブラリが存在するため、Javaに限らず言語を超えたデータ交換のためのフォーマットとしてJSONを利用することができます。