【问题标题】:How to collect data from nested JSONarray which is in JSONobject?如何从 JSONobject 中的嵌套 JSONarray 收集数据?
【发布时间】:2018-06-12 05:15:07
【问题描述】:

我是 Android 的新手。我想从 Ticketmaster api 收集数据并希望在 ListView 中显示。我正在使用排球。 api的JSONview

如图所示,我想显示来自分类和场地的数据。但是在 Model 类中使用时,却没有显示出来。

JSONObjectRequest 中的代码

请查看这些图片,并帮助我。如何从分类和场所获取数据?

                          // Parsing json
                      for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject("_embedded");
                            JSONArray array = obj.getJSONArray("events");
                            JSONObject obj2 = array.getJSONObject(i);
                            JSONArray array1 = obj2.getJSONArray("classifications");
                            JSONObject obj3 = array1.getJSONObject(0);
                            JSONObject obj4 = obj3.getJSONObject("segment");
                            Event event = new Event();
                            event.setName(obj2.getString("name"));
                            event.setClassifications(obj4.getString("name")); // here i want to get data from segment

                            // adding movie to movies array
                            eventList.add(event);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

谢谢!!!

【问题讨论】:

  • 看来setClassifications 需要List&lt;Classification&gt; 并且您将其设置为字符串。作为旁注,请考虑使用 GSON...您可以参考此网站将您的 JSON 转换为 POJO。 jsonschema2pojo.org

标签: android json api listview android-volley


【解决方案1】:

试试这个代码来获取城市

                  for (int i = 0; i < response.length(); i++) {
                    try {

                        JSONObject obj = response.getJSONObject("_embedded");
                        JSONArray array = obj.getJSONArray("events");
                        JSONObject obj2 = array.getJSONObject(i);
                        JSONObject obj = response.getJSONObject("_embedded");
                        JSONArray array1 = obj2.getJSONArray("venues");
                        JSONObject obj3 = array1.getJSONObject(0);
                        JSONObject obj4 = obj3.getJSONObject("city");
                        Event event = new Event();
                        event.setName(obj2.getString("name"));


                        // adding movie to movies array
                        eventList.add(event);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

另外我推荐使用GSON 来解析JSON

【讨论】:

    【解决方案2】:

    请检查一下。

    JSONObject object = new JSONObject(response.toString());
    JSONObject embedded = object.getJSONObject("_embedded");
    JSONArray eventsArray = embedded.getJSONArray("events");
    
    for(int i = 0;i<eventsArray.length();i++){
      JSONObject event = eventsArray.getJSONObject(i);
      // Parse data from this event object
    }
    

    希望这会有所帮助。

    【讨论】:

    • 它只解析事件中的数据,但在事件中有数组,我想从它们中解析
    【解决方案3】:

    您可以将您的 json 数据转换为 pojo 模型类。它将帮助您轻松获得价值。这是您的模型 pojo 类的示例

    public class ItemOption {
    @SerializedName("embeded")
    @Expose
    private Embeded embeded;public Embeded getEmbeded() {
        return embeded;
    }
    
    public void setEmbeded(Embeded embeded) {
        this.embeded = embeded;
    }
    
    public class City {
    
        @SerializedName("name")
        @Expose
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    
    public class Embeded {
    
        @SerializedName("events")
        @Expose
        private List<Event> events = null;
    
        public List<Event> getEvents() {
            return events;
        }
    
        public void setEvents(List<Event> events) {
            this.events = events;
        }
    
    }
    
    public class Embeded_ {
    
        @SerializedName("venue")
        @Expose
        private List<Venue> venue = null;
    
        public List<Venue> getVenue() {
            return venue;
        }
    
        public void setVenue(List<Venue> venue) {
            this.venue = venue;
        }
    
    }
    
    public class Event {
    
        @SerializedName("embeded")
        @Expose
        private Embeded_ embeded;
    
        public Embeded_ getEmbeded() {
            return embeded;
        }
    
        public void setEmbeded(Embeded_ embeded) {
            this.embeded = embeded;
        }
    
    }
    
    
    public class Venue {
    
        @SerializedName("city")
        @Expose
        private City city;
    
        public City getCity() {
            return city;
        }
    
        public void setCity(City city) {
            this.city = city;
        }
    
    }}
    

    然后

    itemOption.getEmbeded().getEvents().get(0).getEmbeded().getVenue().get(0).getCity();
    

    【讨论】:

    • 我正在使用来自 TicketMaster 的依赖项。它提供模型类。
    • 您可以从 Ticketmaster 模型类中获取值并将其插入您的模型 itemOption.setEmbeded(您的模型类对象);
    • 使用静态字符串获取如下值并不是一个好方法:obj3.getJSONObject("segment");
    【解决方案4】:

    试试这个......

                    for (int i = 0; i < response.length(); i++) {
                    try {
    
                        JSONObject obj = response.getJSONObject("_embedded");
                         Iterator iterator = Obj.keys();
    
                        //while(iterator.hasNext()){
                        String key = (String) iterator.next();
                        JSONObject issue = Obj.getJSONObject(key);
                        JSONArray array = obj.getJSONArray("events");
                        JSONObject obj2 = array.getJSONObject(i);
                        JSONObject obj = response.getJSONObject("_embedded");
                        JSONArray array1 = obj2.getJSONArray("venues");
                        JSONObject obj3 = array1.getJSONObject(0);
                        JSONObject obj4 = obj3.getJSONObject("city");
                        String key1 = (String) iterator.next();
                        JSONObject issue1 = Obj.getJSONObject(key1);
                        Event event = new Event();
                        event.setName(obj2.getString("name"));
    
    
                        // adding movie to movies array
                        eventList.add(event);
    
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
    

    【讨论】:

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