Десериализовать JSON с Gson в объекте - PullRequest
2 голосов
/ 06 ноября 2011

У меня есть строка JSON, такая как ниже. Это происходит с веб-сайта (URL-адрес ниже на страницу), который я использую в приложении для Android.

{"posts": [{"id":"0000001","longitude":"50.722","latitude":"-1.87817","position":"Someplace 1","altitude":"36","description":"Some place 1 "},{"id":"0000002","longitude":"50.722","latitude":"-1.87817","position":"Some PLace 2","altitude":"36","description":"Some place 2 description"}]}

Я хотел бы десериализовать это в Список, где я могу потом повторить их в приложении. Как мне это сделать? Я создал класс со свойствами и методами и классом List, как показано ниже, а затем использовал fromJson для его десериализации, но он возвращает NULL. Надеюсь, что вопрос ясен и большое спасибо заранее.

ListClass

пакет dataaccess;

import java.util.List;

public class LocationList {
    public static List<Location> listLocations;

    public void setLocationList(List <Location> listLocations) {
        LocationList.listLocations = listLocations;
    }

    public List<Location> getLocationList() {
        return listLocations;
    }
}

GSON

public LocationList[] getJsonFromGson(String jsonURL) throws IOException{
    URL url = new URL(jsonURL);
    String content = IOUtils.toString(new InputStreamReader(url.openStream()));
    LocationList[] locations =  new Gson().fromJson(content, LocationList[].class);

    return locations;
}

Ответы [ 2 ]

2 голосов
/ 06 ноября 2011

Что, если этот ответ JSON может быть проанализирован с использованием собственных классов , вот решение для того же:

String strJsonResponse="Store response here";
JsonObject obj = new JsonObject(strJsonResponse);
JsonArray array = obj.getJsonArray("posts");

for(int i=0; i<array.length; i++)
{
   JsonObject subObj = array.getJsonObject(i);
   String id = subObj.getString("id");
   String longitude = subObj.getString("longitude");
   String latitude = subObj.getString("latitude");
   String position = subObj.getString("position");
   String altitude = subObj.getString("altitude");
   String description = subObj.getString("description");

   // do whatever procedure you want to do here
}
2 голосов
/ 06 ноября 2011

Вы пытаетесь десериализовать в массив объектов LocationList - это точно не было вашим намерением, не так ли?Фрагмент json не содержит списка списков .

. Я бы отбросил класс LocationList (кроме случаев, когда он должен быть расширен в будущем?) И использовал бы чистый List.Затем вы должны создать токен типа, подобный этому:

java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<ArrayList<Location>>() {}.getType();
List<Location> locations = new Gson().fromJson(content, type);
...