使用GSON

时间:2015-05-16 13:30:33

标签: java android json gson

我从Android应用中的Jersey项目中获取了一个JSON字符串{"status":208,"routes":[1,9,3]}。 JSON字符串没有标志名称。用GSON libarary解析它是否可能?我实际上只是在其中的ArrayList routes值中被强制插入。我做了以下但我没有列表可以得到。我怎么能用Gson做到这一点?

doInbackground方法:

StringBuilder sb = new StringBuilder();
            reader = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));
            String line;

            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");

            }

            Gson gson = new Gson();
            StopsJSONList obj = gson.fromJson(sb.toString(), StopsJSONList.class);
            List<StopsJSON> stopsjson = obj.getStopsList();
            Iterator<StopsJSON> iterator = stopsjson.iterator();
            while(iterator.hasNext()){
                StopsJSON  stopsElement = (StopsJSON) iterator.next();
                ArrayList<Integer> routeList = stopsElement.getRoute();

            }

StopsList类:

import java.util.ArrayList;


public class StopsJSONList {
    private ArrayList<StopsJSON> stops;

    public ArrayList<StopsJSON> getStopsList() {
        return stops;
    }

    public void setStopsList(ArrayList<StopsJSON> stopsList) {
        this.stops = stopsList;
    }
}

StopsJSON:

import java.util.ArrayList;

public class StopsJSON {
    private int status;
    private ArrayList<Integer> route ;


    public StopsJSON(int status, ArrayList<Integer> route) {
        //super();
        this.status = status;
        this.route = route;
    }
    public int getStatus() {
        return status;
    }
    public ArrayList<Integer> getRoute() {
        return route;
    }
    public void setStatus(int status) {
        this.status = status;
    }
    public void setRoute(ArrayList<Integer> route) {
        this.route = route;
    } 

}

1 个答案:

答案 0 :(得分:2)

您的问题是route类中的StopsJSON属性与json结构中的routes字段不匹配。要解决此问题,您可以将StopsJSON类的属性更改为routes或添加类似的注释

@SerializedName("routes")
private ArrayList<Integer> route ;

这是一种简单的方法:

创建课程StopsJSON,如下所示

class StopsJSON {
    private int status;
    private ArrayList<Integer> routes;

    public StopsJSON(int status, ArrayList<Integer> route) {
        // super();
        this.status = status;
        this.routes = route;
    }

    public int getStatus() {
        return status;
    }

    public ArrayList<Integer> getRoutes() {
        return routes;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public void setRoutes(ArrayList<Integer> routes) {
        this.routes = routes;
    }

}

使用Gson API将json String转换为StopsJSON对象

Gson gson = new Gson();
StopsJSON data = gson.fromJson(sb.toString(), StopsJSON.class);

获取routes

ArrayList<Integer> routes = data.getRoutes();
System.out.println(routes);

输出:

[1, 9, 3]