Я прочитал, что при желании использовать 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);
}
}
Какой подход проще?