Gson Я не могу десериализовать массив, который содержит широту и долготу - PullRequest
2 голосов
/ 19 января 2020

Я десериализую Json с сайта по качеству воздуха, который имеет массив широты и долготы. Json выглядит следующим образом:

{
  "geo": [
    -36.05035,
    146.942
  ],
  "name": "Albury South-west Slopes, Australia",
  "url": "https://aqicn.org/city/australia/nsw/albury/south-west-slopes"
}

Я написал собственный десериализатор, который выполняет эту работу, но я не могу десериализовать "geo": [-36.05035, 146.942].

Мой код выглядит следующим образом:

public static class City {
    private Geo[] geo;
    private String name;
    private String url;

    public Geo[] getGeo() {
        return geo;
    }

    public void setGeo(Geo[] geo) {
        this.geo = geo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

public static class Geo {
    //what are the getters and setters for an array with no names just numbers?
}

Это меня озадачило Спасибо, Фил

Ответы [ 2 ]

1 голос
/ 20 января 2020

Пусть geo будет List<Double> вместо вложенного класса:

public static class City {
    private List<Double> geo;
    private String name;
    private String url;

    public List<Double> getGeo() {
        return geo;
    }

    public void setGeo(List<Double> geo) {
        this.geo = geo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

Тогда десериализация должна быть простой:

String json = "{\"geo\":[-36.05035,146.942],\"name\": \"Albury South-west Slopes, Australia\",\"url\": \"https://aqicn.org/city/australia/nsw/albury/south-west-slopes\"}";
City city = new Gson().fromJson(json, City.class);
1 голос
/ 19 января 2020

Вы можете использовать Джексона с пользовательским десериализатором. Для справки вы можете посмотреть Custom десериализатор

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