проблема при разборе ответа JSON на модель Java с Gson - PullRequest
0 голосов
/ 13 апреля 2019

У меня небольшая проблема при попытке проанализировать этот JSON, полученный при вызове locationIQ API

[  
   {  
      "place_id":"208857340",
      "licence":"https:\/\/locationiq.com\/attribution",
      "osm_type":"relation",
      "osm_id":"7444",
      "boundingbox":[  
         "48.8155755",
         "48.902156",
         "2.224122",
         "2.4697602"
      ],
      "lat":"48.8566101",
      "lon":"2.3514992",
      "display_name":"Paris, \u00cele-de-France, France m\u00e9tropolitaine, France",
      "class":"place",
      "type":"city",
      "importance":0.97893459932191,
      "icon":"https:\/\/locationiq.org\/static\/images\/mapicons\/poi_place_city.p.20.png"
   },
   {  
      "place_id":"208880706",
      "licence":"https:\/\/locationiq.com\/attribution",
      "osm_type":"relation",
      "osm_id":"71525",
      "boundingbox":[  
         "48.8155755",
         "48.902156",
         "2.224122",
         "2.4697602"
      ],
      "lat":"48.85881005",
      "lon":"2.32003101155031",
      "display_name":"Paris, \u00cele-de-France, France m\u00e9tropolitaine, France",
      "class":"boundary",
      "type":"administrative",
      "importance":0.97893459932191,
      "icon":"https:\/\/locationiq.org\/static\/images\/mapicons\/poi_boundary_administrative.p.20.png"
   },
  {...}
]

Я создал 2 модели классов Java, один с именем Location, у которого есть только arrayList

ArrayList<LocationData> locations;

и еще один, который является описанием java того, что я получил в моем ответе

    @SerializedName("place_id")
    private String placeId;
    @SerializedName("licence")
    private String license;
    @SerializedName("osm_type")
    private String osmType;
    @SerializedName("osm_id")
    private String osmId;
    @SerializedName("boundingbox")
    private ArrayList<String> geoLocation;
    @SerializedName("lat")
    private String lat;
    @SerializedName("lon")
    private String lon;
    @SerializedName("display_name")
    private String displayName;
    @SerializedName("class")
    private String classType;
    @SerializedName("type")
    private String type;
    @SerializedName("importance")
    private String importance;
    @SerializedName("icon")
    private String icon;

но когда я пытаюсь сделать Gson.fromJson(myStringResponse, Locations.class);

У меня есть IllegalStateException Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

Я пытался заменить Locations.class на LocationData, но это ничего не изменило.

Так что, если у вас есть подсказка.

1 Ответ

0 голосов
/ 13 апреля 2019

Если для вашего Locations.class, LocationData.class требуется десериализованный объектный класс, тогда ваш json-объект должен быть таким, как показано ниже. У корневого элемента есть JSONArray, который содержит член с именем location.This JSONArray содержит другой объект, который является locationdata сразличные члены данных, такие как place_id, license и т. д.,

{  
  "locations":[  
    {  
     "place_id":"208857340",
     "licence":"https:\/\/locationiq.com\/attribution",
     "osm_type":"relation",
     "osm_id":"7444",
     "boundingbox":[  
        "48.8155755",
        "48.902156",
        "2.224122",
        "2.4697602"
     ],
     "lat":"48.8566101",
     "lon":"2.3514992",
     "display_name":"Paris, \u00cele-de-France, France m\u00e9tropolitaine, France",
     "class":"place",
     "type":"city",
     "importance":0.97893459932191,

      "icon":"https:\/\/locationiq.org\/static\/images\/mapicons\/poi_place_city.p.20.png"
   },
  {  
     "place_id":"208880706",
     "licence":"https:\/\/locationiq.com\/attribution",
     "osm_type":"relation",
     "osm_id":"71525",
     "boundingbox":[  
        "48.8155755",
        "48.902156",
        "2.224122",
        "2.4697602"
     ],
     "lat":"48.85881005",
     "lon":"2.32003101155031",
     "display_name":"Paris, \u00cele-de-France, France m\u00e9tropolitaine, France",
     "class":"boundary",
     "type":"administrative",
     "importance":0.97893459932191,
     "icon":"https:\/\/locationiq.org\/static\/images\/mapicons\/poi_boundary_administrative.p.20.png"
  }
  ]
}

Я преобразую строку json обратно в объект Java Pojo.

try {
        BufferedReader myStringResponse = new BufferedReader(
                 new FileReader("E:\\RunningApp\\file1.json"));
        Locations locationDesirialize = gson.fromJson(myStringResponse, Locations.class);

        locationDesirialize.getLocations().forEach(location ->{
            System.out.println("getPlaceId "+location.getPlaceId());
        } );

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...