【问题标题】:Parse JSON String without array name with GSON使用 GSON 解析没有数组名的 JSON 字符串
【发布时间】:2015-05-16 13:30:33
【问题描述】:

我从我的 Android 应用程序中的 Jersey 项目中获取 JSON 字符串 {"status":208,"routes":[1,9,3]}。 JSON 字符串没有标记名称。是否可以用 GSON 库解析它?我实际上只是对其中的 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;
    }
}

停止JSON:

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;
    } 

}

【问题讨论】:

    标签: java android json gson


    【解决方案1】:

    您的问题是StopsJSON 类中的route 属性与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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多