JavaオブジェクトをJSONに変換するためのライブラリはいくつか種類があります。私が参加した案件ではJSONICを使用していたのですが、JSONICで変換すると、JavaオブジェクトとJSONでメンバ変数の順番が違ってしまいます。例えば↓
●JSONに変換するオブジェクト
1 2 3 4 5 6 7 8 9 10 11 |
public class Student { private String name; private int age; private String sex; public Student(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } } |
1 2 3 |
/* JSONICでの変換結果 */ {"age":9,"name":"テスト太郎","sex":"男"} // >アルファベット順になっている |
このようにメンバ変数の定義順ではなくアルファベット順になります。JSONなのでとくに順番に意味が無く、問題はありません。しかし、私の場合、設計書での定義順とオブジェクトのメンバ変数の定義順を合わせていたため、結果出力されるJSONだけがアルファベット順というのはなんとなく嫌だったので、メンバ変数順にできないかいろいろ試しました。結果、JSONICの代わりにGsonを使うことにしました。
●GsonでJavaオブジェクトをJSON文字列に変換する例
1 2 3 4 5 6 7 8 9 10 |
import com.google.gson.Gson; public class GSON_test { public static void main(String[] args) { Student obj = new Student("テスト太郎", 9, "男"); String jsonStr = new Gson().toJson(obj); System.out.println(jsonStr); } } |
1 2 3 |
/* 実行結果 */ {"name":"テスト太郎","age":9,"sex":"男"} // > Studentクラスのメンバ変数の定義順になっている |
このように、Gsonでは特に何も意識せずとも標準でオブジェクトで定義したメンバ変数の順番でJSONを出力してくれます。(o≧▽≦)ゝ
Gsonのダウンロードはこちら