Android で JSON データの呼び出し
- assets に "sample.json" として JSON データを保存
{
first_name: taro,
last_name: yamada,
favorite: {
music: pops,
book: novels,
},
histories: [
{ date: "1980-01-01", desc: "Birthed." },
{ date: "1986-04-01", desc: "Elementary school entrance." },
],
}
- Activity で JSON データを InputStream として呼び出し
InputStream inputStream = getAssets().open("sample.json");
Gson で JSON データをオブジェクトに変換
- 変換先のオブジェクトのクラスを宣言する
- JSON データのキー名と、オブジェクトのプロパティ名が対応するように
public class User {
public String first_name;
public String last_name;
public HashMap<String, String> favorite;
public ArrayList<HashMap<String, String>> histories;
}
InputStream inputStream = getAssets().open("sample.json");
JsonReader jsonReader = new JsonReader( new InputStreamReader( inputStream ) );
User user = new Gson().fromJson(jsonReader, User.class);
Log.d("GSON_TEST", user.first_name);
Log.d("GSON_TEST", user.last_name);
Log.d("GSON_TEST", user.favorite.get("music"));
Log.d("GSON_TEST", user.favorite.get("book"));
Log.d("GSON_TEST", user.histories.get(0).get("date"));
Log.d("GSON_TEST", user.histories.get(0).get("desc"));
Log.d("GSON_TEST", user.histories.get(1).get("date"));
Log.d("GSON_TEST", user.histories.get(1).get("desc"));
(追記)オブジェクトをネストさせる
- 変換先のクラスをネストさせてもプロパティ名とキー名を対応付けてオブジェクトを作ってくれる
- HashMap で定義していた histories を、History クラスを新たに作って関連付ける
public class User {
public String first_name;
public String last_name;
public HashMap<String,String> favorite;
public ArrayList<History> histories;
}
public class History {
public String date;
public String desc;
}
JsonReader jsonReader = new JsonReader( new InputStreamReader( getAssets().open("sample.json") ) );
User user = new Gson().fromJson(jsonReader, User.class);
Log.d("GSON_TEST", user.histories.get(0).date);
Log.d("GSON_TEST", user.histories.get(0).desc);
Log.d("GSON_TEST", user.histories.get(1).date);
Log.d("GSON_TEST", user.histories.get(1).desc);