Является ли использование GSON выгодным при попытке проанализировать только определенные объекты и поля в JSON? - PullRequest
0 голосов
/ 20 сентября 2019

Я прочитал, что при желании использовать GSON для анализа только определенных данных из JSON, а не файла entile, можно использовать GSAD TypeAdapter и TypeAdapterFactory.Я видел реализацию этого, и это кажется довольно громоздким.Это заставило меня задуматься, есть ли какая-то польза от выбора GSON по сравнению с методами Java для анализа JSON, хотя JSON является вложенным и сложным.

Вот один объект из JSON

[
  {
    "name": "Afghanistan",
    "topLevelDomain": [
      ".af"
    ],
    "alpha2Code": "AF",
    "alpha3Code": "AFG",
    "callingCodes": [
      "93"
    ],
    "capital": "Kabul",
    "altSpellings": [
      "AF",
      "Afġānistān"
    ],
    "region": "Asia",
    "subregion": "Southern Asia",
    "population": 27657145,
    "latlng": [
      33,
      65
    ],
    "demonym": "Afghan",
    "area": 652230,
    "gini": 27.8,
    "timezones": [
      "UTC+04:30"
    ],
    "borders": [
      "IRN",
      "PAK",
      "TKM",
      "UZB",
      "TJK",
      "CHN"
    ],
    "nativeName": "افغانستان",
    "numericCode": "004",
    "currencies": [
      {
        "code": "AFN",
        "name": "Afghan afghani",
        "symbol": "؋"
      }
    ],
    "languages": [
      {
        "iso639_1": "ps",
        "iso639_2": "pus",
        "name": "Pashto",
        "nativeName": "پښتو"
      },
      {
        "iso639_1": "uz",
        "iso639_2": "uzb",
        "name": "Uzbek",
        "nativeName": "Oʻzbek"
      },
      {
        "iso639_1": "tk",
        "iso639_2": "tuk",
        "name": "Turkmen",
        "nativeName": "Türkmen"
      }
    ],
    "translations": {
      "de": "Afghanistan",
      "es": "Afganistán",
      "fr": "Afghanistan",
      "ja": "アフガニスタン",
      "it": "Afghanistan",
      "br": "Afeganistão",
      "pt": "Afeganistão",
      "nl": "Afghanistan",
      "hr": "Afganistan",
      "fa": "افغانستان"
    },
    "flag": "https://restcountries.eu/data/afg.svg",
    "regionalBlocs": [
      {
        "acronym": "SAARC",
        "name": "South Asian Association for Regional Cooperation",
        "otherAcronyms": [],
        "otherNames": []
      }
    ],
    "cioc": "AFG"
  },
...]

Ради вопроса, скажем, приложение должно получить название страны, часовые пояса и валюты.

Country.Java

public class Country implements Parcelable {
    private int id;
    private String name;
    private List<String> timeZones;
    private Currency currency;

    public Country(id, String name, List<String> timeZones, Currency currency) {
        this.id = id;
        this.name = name;
        this.timeZones = timeZones;
        this.currency = currency;
    }

    protected Country(Parcel in) {
        id = in.readInt();
        name = in.readString();
        timeZones = Collections.singletonList(in.readString());
        in.readList(Collections.singletonList(this.currency), (Currency.class.getClassLoader()));
    }

    public static final Creator<Country> CREATOR = new Creator<Country>() {
        @Override
        public Country createFromParcel(Parcel in) {
            return new Country(in);
        }

        @Override
        public Country[] newArray(int {return new Country[size];}
    };

    // Getters and setters
...

    @Override
    public String toString() {...}

    @Override
    public int describeContents() {return 0;}

    @Override
    public void writeToParcel(Parcel parcel, int i) {...}
}

Currency.Java

public class Currency implements Parcelable {

    private String name;
    private String symbol;

    public Language(){}

    public static final Creator<Currency > CREATOR = new Creator<Currency >() {
        @Override
        public Currency createFromParcel(Parcel in) {
            return new Currency (in);
        }

        @Override
        public Currency [] newArray(int size) {
            return new Language[size];
        }
    };

// Getters and setters
...

    @Override
    public String toString() {
        return "Currency{" +
                "name='" + name + '\'' +
                ", symbol='" + symbol + '\'' +
                '}';
    }

    protected Currency(Parcel in) {
        name = in.readString();
    }
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(name);
        parcel.writeString(symbol);
    }

}

Какой подход проще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...