ほぼ Google Gson のユーザガイドに記述されている内容です。
一般 JSON オブジェクトフォーマット JSON 文字列のルートがいきなり、 JSON オブジェクトの一般プロパティになっている場合です。{ "link": "http://www.yahoo.co.jp/", "name": "Yahoo! JAPAN" }一番使う事の多いパターンの基本で、そのフォーマットのクラス定義を作成して、Gson に展開してもらいます。 一般 配列フォーマット JSON 文字列のルートがいきなり、 JSON オブジェクトの配列になっている場合で、データとしては特殊な部類になります。[ "http://www.yahoo.co.jp/", "Yahoo! JAPAN" ]ですが、Gson 側では以下のように比較的簡単に扱えます String[] data = gson.fromJson(json, String[].class); また、これは Java での作業の都合で、ArrayList に変更する事も可能です。(但し、少し面倒です) Type arrayListType = new TypeToken<ArrayList<String>>(){}.getType(); ArrayList<String> al = gson.fromJson(json, arrayListType); 配列の中のデータ毎に型が違うフォーマット[ "サイトデータ", 1, { "link": "http://www.yahoo.co.jp/", "name": "Yahoo! JAPAN" } ]このタイプが一番面倒です。通常使われる事は無いと思いますが、使用する場合は一つ一つ対応する事になると思います。( Gson でのオリジルサンプルコードはここにあります ) オブジェクト内にオブジェクト配列{ "title": "サイトデータ", "number": 2, "urlList": [ { "link": "http://www.yahoo.co.jp/", "name": "Yahoo! JAPAN" }, { "link": "https://www.google.co.jp/", "name": "Google" } ] }データフォーマットとしてはこれが一番優れており、全てクラスを定義する事によって容易に対応できます。
import java.lang.reflect.Type;
import java.util.ArrayList;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
public class Main {
// メンバ用クラス
class LinkFormat {
String link;
String name;
}
// メンバに配列
class SiteData {
String title;
int number;
LinkFormat[] urlList;
}
// メンバに ArrayList
class SiteDataList {
String title;
int number;
ArrayList <LinkFormat> urlList;
}
public static void main(String[] args) {
String json = null;
// 一般 JSON オブジェクトフォーマット
System.out.println("-----------------------------------------");
json = "";
json += "{";
json += "\"link\":\"http://www.yahoo.co.jp/\",";
json += "\"name\":\"Yahoo! JAPAN\"";
json += "}";
System.out.println(json);
Gson gson = new Gson();
// オブジェクトに変換
System.out.println("-----------------------------------------");
LinkFormat linkFormat = gson.fromJson(json, LinkFormat.class);
System.out.println(linkFormat.link);
System.out.println(linkFormat.name);
// 一般 配列フォーマット
System.out.println("-----------------------------------------");
json = "";
json += "[";
json += "\"http://www.yahoo.co.jp/\",";
json += "\"Yahoo! JAPAN\"";
json += "]";
System.out.println(json);
// 配列に変換
String[] data = gson.fromJson(json, String[].class);
System.out.println(data[0]);
System.out.println(data[1]);
// ArrayListに変換
System.out.println("-----------------------------------------");
Type arrayListType = new TypeToken<ArrayList<String>>(){}.getType();
ArrayList<String> al = gson.fromJson(json, arrayListType);
System.out.println(al.get(0));
System.out.println(al.get(1));
// 特殊 JSON オブジェクト配列フォーマット
System.out.println("-----------------------------------------");
json = "";
json += "[";
json += "\"サイトデータ\",";
json += "1,";
json += "{";
json += "\"link\":\"http://www.yahoo.co.jp/\",";
json += "\"name\":\"Yahoo! JAPAN\"";
json += "}";
json += "]";
System.out.println(json);
// JSON 文字列配列内の型が違う場合はひとつひとつ対応
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(json).getAsJsonArray();
String title = gson.fromJson(array.get(0), String.class);
int number = gson.fromJson(array.get(1), int.class);
LinkFormat lf = gson.fromJson(array.get(2), LinkFormat.class);
System.out.println( title );
System.out.println( number );
System.out.println( lf.link );
System.out.println( lf.name );
// JSON オブジェクト内にオブジェクト配列
System.out.println("-----------------------------------------");
json = "";
json += "{";
json += "\"title\" : \"サイトデータ\",";
json += "\"number\" : 2,";
json += "\"urlList\" : [";
json += "{";
json += "\"link\":\"http://www.yahoo.co.jp/\",";
json += "\"name\":\"Yahoo! JAPAN\"";
json += "},";
json += "{";
json += "\"link\":\"https://www.google.co.jp/\",";
json += "\"name\":\"Google\"";
json += "}";
json += "]";
json += "}";
System.out.println(json);
// 配列バージョン
SiteData sd = gson.fromJson(json, SiteData.class);
System.out.println( sd.title );
System.out.println( sd.number );
System.out.println( sd.urlList[0].link );
System.out.println( sd.urlList[0].name );
System.out.println( sd.urlList[1].link );
System.out.println( sd.urlList[1].name );
// ArrayList バージョン
SiteDataList sdl = gson.fromJson(json, SiteDataList.class);
System.out.println( sdl.title );
System.out.println( sdl.number );
System.out.println( sdl.urlList.get(0).link );
System.out.println( sdl.urlList.get(0).name );
System.out.println( sdl.urlList.get(1).link );
System.out.println( sdl.urlList.get(1).name );
}
}
※ 整形したい場合は以下のようにします
// オブジェクトを整形して JSON 文字列に変換する Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create(); String jsonString = gsonPretty.toJson(sd);
|
|
【Javaの最新記事】
- Java : Apache POI で最低限の処理を標準化( ここではワークブックは新規作成 )
- Java のコンソールで NAVER の RSS を取得して、title 部分を正規表現で加工して表示するサンプル
- Eclipse で、文字列内のファイルのパスの \ 記号を \\ にする方法
- Java : Google gson 2.3.1 で JSON 文字列を定義済みのクラスを使ってオブジェクト化
- Java : Google gson 2.3.1 で、JSON 文字列のフォーマットが解らなくてもなんとかなる『ベタ』な処理方法
- Eclipse のホバーで追加したライブラリの javadoc を表示させる手順
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の更新(データ修正)処理
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の入力チェック
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の二会話画面制御
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)でDBからSELECT構文で行データを読み出す
- Eclipse+WindowBuilder : ボタンイベント(AbstractAction) の作成
- Eclipse+WindowBuilder : データベースアプリケーション(社員マスタメンテ)の画面作成
- Eclipse + WindowBuilder : JDBC と ODBC を使った、オールマイティなデータベース接続サンプル( MySQL / SQLServer / Oracle / Postgr..
- Eclipse + WindowBuilder : Design タブが表示されなくなった時の対処
- Eclipse のパンくずリスト(breadcrumb) をワークスペースの設定ファイルで非表示にする
- Java : Eclipse 実行の System.in.read(buff) でコンソール入力
- iText( itextpdf-5.4.3 / Java ) で簡単に PDF 出力をする。
- SQL 文へのデータバインド用 public class GetSQL
- ADT( Android Development Tools ) Eclipse に Window Builder をインストールして Swing アプリケーションを作成する(2)
- Java : Windows の環境変数の列挙( 含ソート )






