[解決済み】Gson - Jsonから型付きArrayList<T>に変換する。
2022-04-04 01:20:24
質問
Gsonライブラリを使用して、JSON文字列をどのように
ArrayList
カスタムクラスの
JsonLog
? 基本的には
JsonLog
は、私のAndroidアプリが作成するさまざまな種類のログ(SMSログ、通話ログ、データログ)によって実装されるインターフェイスであり、この
ArrayList
はそれらすべてのコレクションです。6行目でずっとエラーになるんだけど。
public static void log(File destination, JsonLog log) {
Collection<JsonLog> logs = null;
if (destination.exists()) {
Gson gson = new Gson();
BufferedReader br = new BufferedReader(new FileReader(destination));
logs = gson.fromJson(br, ArrayList<JsonLog>.class); // line 6
// logs.add(log);
// serialize "logs" again
}
}
どうやらコンパイラは、私が型付けされた
ArrayList
. どうすればいいのでしょうか?
解決方法は?
を使用することができます。 タイプトークン を使用して、json 文字列をカスタムオブジェクトにロードします。
logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());
ドキュメンテーション
一般的な型を表す T .
Javaはまだ汎用的な型を表現する方法を提供していないので、このクラスで表現しています。クライアントにこのクラスのサブクラスを作成させ、実行時にも型情報を取得できるようにします。
例えば、以下のような型リテラルを作成します。
List<String>
であれば、空の匿名内部クラスを作成することができます。
TypeToken<List<String>> list = new TypeToken<List<String>>() {};
この構文は、次のようなワイルドカードパラメータを持つタイプリテラルを作成するためには使用できません。
Class<?>
またはList<? extends CharSequence>
.
Kotlinです。
で行う必要がある場合は コトリン を使えば、こんな風にできます。
val myType = object : TypeToken<List<JsonLong>>() {}.type
val logs = gson.fromJson<List<JsonLong>>(br, myType)
または、次のように表示されます。 この回答 をご覧ください。
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] ArrayListの初期化を1行で行う。
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] KotlinでGsonを使ったTypeToken + ジェネリックの使い方