ほぼ 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 の環境変数の列挙( 含ソート )