Retrofitを使用してjson構造を配列に変換する

ジョルジオジェラルディ

Trakt.tvAPIのRetrofitと醜いjsonオブジェクトに問題があります。

{
    "season": 1,
    "episodes": {
        "1": true,
        "2": true,
        "3": false,
        "4": false,
        "5": false,
        "6": false,
        "7": false
    }
}

「エピソード」のコンテンツは明らかに動的であり、次のような単純なブール配列として処理したいと思います。

int season;
Boolean[] episodes;

どうやってするか?

ブラジ

最初にJSON文字列をに変換しMap<String,Object>、最後に目的のオブジェクトを作成できます。

サンプルコード:

public class EpisodesDetail {
    private int season;
    private Boolean[] episodes;
    // getter & setter 
}
...

BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
Type type = new TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> map = new Gson().fromJson(reader, type);

EpisodesDetail geometry = new EpisodesDetail();
geometry.setSeason(((Double) map.get("season")).intValue());
geometry.setEpisodes(((Map<String, Boolean>) map.get("episodes")).values().toArray(
        new Boolean[] {}));

System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(geometry));

出力:

{
  "season": 1,
  "episodes": [
    true,
    true,
    false,
    false,
    false,
    false,
    false
  ]
}

GSONデシリアライザーを使用するもう1つのアプローチがあります

サンプルコード:

class EpisodesDetailDeserializer implements JsonDeserializer<EpisodesDetail> {

    @Override
    public EpisodesDetail deserialize(final JsonElement json, final Type typeOfT,
            final JsonDeserializationContext context) throws JsonParseException {

        EpisodesDetail geometry = new EpisodesDetail();
        JsonObject jsonObject = json.getAsJsonObject();
        int season = jsonObject.get("season").getAsInt();
        geometry.setSeason(season);

        List<Boolean> episodes = new ArrayList<Boolean>();
        Set<Entry<String, JsonElement>> set = jsonObject.get("episodes").getAsJsonObject()
                .entrySet();

        Iterator<Entry<String, JsonElement>> it = set.iterator();
        while (it.hasNext()) {
            episodes.add(it.next().getValue().getAsBoolean());
        }
        geometry.setEpisodes(episodes.toArray(new Boolean[] {}));
        return geometry;
    }
}

BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
EpisodesDetail episodesDetail = new GsonBuilder()
        .registerTypeAdapter(EpisodesDetail.class, new EpisodesDetailDeserializer())
        .create().fromJson(reader, EpisodesDetail.class);

System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(episodesDetail));

Gson用のカスタムJSONデシリアライザーを作成するにはどうすればよいですか?を参照してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

構造体を使用してJSONを配列に変換する

memcpyを使用して構造体をchar配列に変換する

配列構造を維持しながらjqを使用してtsvの配列でJSONを変換するにはどうすればよいですか?

パスの配列をJSON構造に変換する方法は?

JSON構造を配列に変換する:Groovy

Array.fromを使用してデータ構造を配列に変換できるようにします

PHPを使用して単純な配列を新しいデータ構造に変換する

PowerShellを使用してXMLを特定のJSON構造に変換する

TypeError:ReactNativeでStorybookJSを使用して循環構造をJSONに変換する

pysparkを使用してデータフレーム列をネストされたJSON構造に変換する

Excelからの列単位のJSONデータをPythonを使用して階層構造に変換する

JSON配列構造を変更/再変換する方法

私のjson配列をreactjsの私のjson構造に変換します

BigQueryにアップロードするための構造体と配列構造を使用したPandasデータフレームのJSONへの変換

Javascriptを使用して構造化文字列を配列に変換する

構造体変数の配列を使用して構造体にアクセスする

scipy.io savematを使用して複数のPython辞書をMATLAB構造体配列に変換します

CGOを使用して構造体のGoネスト配列をCに変換しますか?

配列フィールドを使用してpostgres行をgolang構造体に変換します

Javascriptを使用して配列をネストされたオブジェクト構造に変換します

javascriptで親子配列をjsonツリー構造に変換する方法

文字列を構造体配列に変換する方法

構造体の配列を文字列に変換するPyspark

pysparkで配列の配列を構造体の配列に変換します

構造体を構造体配列に変換するMatlab関数

char配列を時間構造に変換します

PHP配列を新しいデータ構造に変換する

PHP配列をSOAP構造に変換する

ツリー構造を2D配列に変換する

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    Railsで宝石のレイアウトを使用するにはどうすればよいですか?

  3. 3

    Chromeウェブアプリのウェブビューの高さの問題

  4. 4

    Ansibleで複数行のシェルスクリプトを実行する方法

  5. 5

    アンドロイド9 - キーストア例外android.os.ServiceSpecificException

  6. 6

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  7. 7

    CSSのみを使用して三角形のアニメーションを作成する方法

  8. 8

    Google Playストア:アプリページにリーダーボードと実績のアイコン/バッジが表示されない

  9. 9

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  10. 10

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  11. 11

    Windows 7では、一部のプログラムは「ビジュアルテーマを無効にする」レジストリ設定を行いませんか?

  12. 12

    Get-ADGroupMember:このリクエストのサイズ制限を超えました

  13. 13

    Pyusb can't find a device while libusb can

  14. 14

    MySQLでJSON_LENGTHとJSON_EXTRACTを組み合わせる方法は?

  15. 15

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  16. 16

    Swiftのブロックのパラメーターに関するドキュメントのマークアップ形式は何ですか?

  17. 17

    Reactでclsxを使用する方法

  18. 18

    追加後、ブートストラップマルチセレクトがテーブルで機能しない

  19. 19

    MongoDB Compass: How to select Distinct Values of a Field

  20. 20

    「埋め込みブラウザのOAuthログイン」を有効にしてコールバックURLを指定した後でも、Facebookのコールバックエラーが発生する

  21. 21

    複数行ヘッダーのJTableヘッダーテキストの折り返し(カスタムTableCellRenderer)

ホットタグ

アーカイブ