Java と C# でソケット通信をするのは簡単ですが、クライアントとサーバ間で、どのような形式でデータを渡すかのプロトコルが重要になってきます。
そこで、今回は JSON(JavaScript Object Notation)の形式でデータの受け渡しをやってみたいと思います。
JSON
JSON は、JavaScript におけるオブジェクトの表記法をベースとしたデータ記述言語ですが、他の言語でも比較的扱いやすく、ライブラリもいくつか用意されています。
Java では Json-lib、.NET では Json.NET があります。
実際に、Java をクライアント、C# をサーバとして JSON のフォーマットを使ってソケット通信をしてみます。
BeanからJSONにデータバインディング
早速、Java の Json-lib を使ってみたいと思います。
2007 年 11 月現在の JDK1.5 用の最新版は Json-lib2.1 です。
(json-lib-2.1-jdk15.jar)
Json-lib が内部的に下記のライブラリもを使っているので、今回は、それぞれ最新をダウンロードしてきました。
1 2 3 4 5 | commons-beanutils.jar commons-collections-3.2.jar commons-lang-2.3.jar commons-logging-1.1.jar ezmorph-1.0.4.jar |
まずは簡単なサンプルとして、Integer と String の値をセットして、JSON 形式の文字列を表示してみます。
JSON 形式の文字列から Bean などに取り込んでみたいと思います。
1 2 3 4 5 6 7 8 9 10 11 | import net.sf.json.JSONObject; public class test { public static void main(String[] args) { JSONObject objJson = new JSONObject(); // 値をセット objJson.put("id", new Integer(2007)); objJson.put("title", "京都競馬場"); // 表示確認 System.out.println(objJson.toString()); } } |
1 2 | 実行結果は下記の通りになります。 {"title":"京都競馬場","id":2007} |
JSONからBeanにデータバインディング
JSON 文字列を Bean でデータバインディングしてみたいと思います。
まずは、数値型と文字列型の 2 つの要素を持った Bean と、JSON 文字列から Bean を生成するプログラム、Bean から JSON 文字列を生成するプログラムを作成してみます。
[Bean]
JsonSampleBean.java
[Javaプログラム]
JsonToBean.java
BeanToJson.java
Bean クラスっぽい名前になっちゃいましたが気にしないで下さい。
まずは、JSON 文字列から Bean を生成するパターンです。
1 2 3 4 5 6 7 8 9 10 11 | import net.sf.json.JSONObject; public class JsonToBean { public static void main(String[] args) { String json = "{\"word\":\"abcde\",\"number\":55}"; JSONObject jsonObject = JSONObject.fromObject(json); System.out.println(jsonObject); JsonSampleBean jsb = (JsonSampleBean)JSONObject.toBean(jsonObject, JsonSampleBean.class); System.out.println("Number : " + jsb.getNumber()); System.out.println("Word : " + jsb.getWord()); } } |
[結果]
{“word”:”abcde”,”number”:55}
Number : 55
Word : abcde
次に、Bean オブジェクトから JSON 文字列を生成するパターンです。
1 2 3 4 5 6 7 8 9 10 | import net.sf.json.JSONObject; public class BeanToJson { public static void main(String[] args) { JsonSampleBean jsonSampleBean = new JsonSampleBean(); jsonSampleBean.setWord("abcde"); jsonSampleBean.setNumber(55); JSONObject jsonObject = JSONObject.fromObject(jsonSampleBean); System.out.println(jsonObject); } } |
[結果]
{“word”:”abcde”,”number”:55}
最後に、使用した Bean です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class JsonSampleBean { private int number; private String word; public JsonSampleBean() { } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } } |