2016-12-28 1 views
3

개조 2.1.0으로 다음 json 객체를 구문 분석하려고하지만 필드에 witnin이없는 이유를 모르겠습니다. 데이터 항상 비어 있습니다.배열을 가진 json 객체를 파싱

{ 
    "status": "OK", 
    "message": "Upload succesfull", 
    "data": [ 
    { 
     "channel": "madrid", 
     "date": "20161212221", 
     "metadata": { 
     "id": "tvmadrid", 
     "channel_id": "tvmadrid.com", 
     "channel_name": "mad",   
     }, 
     "promos": [] 
    }, 
    { 
     "channel": "barca", 
     "date": "20161233232", 
     "metadata": { 
     "id": "tvbarca", 
     "channel_id": "tvbarca.com", 
     "channel_name": "barca", 
     }, 
     "promos": [] 
    } 
    ] 
} 

내 모델 클래스는 여기에 있습니다.

TvChannel

public class TvChannel { 
private String status; 
private String message; 
private Data[] data; 

public String getStatus() { 
    return status; 
} 

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

public String getMessage() { 
    return message; 
} 

public void setMessage(String message) { 
    this.message = message; 
} 



public Data[] getData() { 
    return data; 
} 

public void setData(Data[] data) { 
    this.data = data; 
} 


@Override 
public String toString() { 
    return "status " + status + "\n" 
      + "message " + message + "\n" 
      + "Data " + data.toString(); 
} 

} 여기

사전에 API를

public void getTvChannel(User user, MultipartBody.Part body) { 

    //user.getData().getAutenticate(), 

    Call<TvChannel> callTvChannel = getAPI().listTvChannel(user.getData().getAutenticate(), body); 
    callTvChannel.enqueue(new Callback<TvChannel>() { 
     @Override 
     public void onResponse(Call<TvChannel> call, Response<TvChannel> response) { 
      if (response.isSuccessful()) { 




       Log.d(TAG, "body to string: " + response.body().getStatus()); 

       TvChannel tvChannel = response.body(); 



       ArrayList<Data> datas = new ArrayList<Data>(Arrays.asList(response.body().getData())); 

       Log.d(TAG + " getTvChannel ", " onResponse: status: " + tvChannel.getStatus() + " message: " + tvChannel.getMessage()); 

       for (Data data : datas) { 
        Log.d(TAG,data.toString()); 
       } 

      } else { 
       Log.d(TAG + " getTvChannel", " onResponse " + "Error Code " + response.code()); 
      } 
     } 

     @Override 
     public void onFailure(Call<TvChannel> call, Throwable t) { 
      Log.d(TAG + " getTvChannel ", " onFailure " + " Didn't work " + t.getMessage() + " " + t.getCause() + " \n" + Arrays.toString(t.getStackTrace())); 


     } 
    }); 
} 

감사를 호출하는 방법입니다.

+1

ArrayList 대신 모델 – Ayaanp

+0

이 사이트를 사용하여'JSOn'을'POGO''로 변환하십시오. http://www.jsonschema2pojo.org/ – sushildlh

+0

문제를 해결했습니다. 어떤 방법으로 필드 ** 데이터 **를 검색하고 비어있는 문제가 발생했습니다. 도와 주신 모든 분들께 감사드립니다 !!! – kamboj

답변

0

그냥 같이 목록으로 배열을 교체 tvChannel.getData()

ArrayList<Data> datas = new ArrayList<Data>(Arrays.asList(response.body().getData()));

0

전화 .... 다음 필요가 없습니다

@SerializedName("data") 
private List<Data> data; 

public List<Data> getData() { 
    return data; 
} 

public void setData(List<Data> data) { 
    this.data = data; 
} 
0

는이

1) 변경 시도 모델 클래스 Data[] data ~ ArrayList<Data>

2) GET "데이터"

List<Data> datas=tvChannel.getData(); 

처럼 나는 그것이 작동 바랍니다.

0

enter image description here 문제가 있었다 당신의 JSON에, 는 사용자 정의 데이터 클래스 대신 방식으로 데이터 가져 오기를 (사용하여 어떤 데이터 클래스 모델을 복잡하게

package com.example; 

import java.util.List; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Datum { 

@SerializedName("channel") 
@Expose 
private String channel; 
@SerializedName("date") 
@Expose 
private String date; 
@SerializedName("metadata") 
@Expose 
private Metadata metadata; 
@SerializedName("promos") 
@Expose 
private List<Object> promos = null; 

public String getChannel() { 
return channel; 
} 

public void setChannel(String channel) { 
this.channel = channel; 
} 

public String getDate() { 
return date; 
} 

public void setDate(String date) { 
this.date = date; 
} 

public Metadata getMetadata() { 
return metadata; 
} 

public void setMetadata(Metadata metadata) { 
this.metadata = metadata; 
} 

public List<Object> getPromos() { 
return promos; 
} 

public void setPromos(List<Object> promos) { 
this.promos = promos; 
} 

} 
-----------------------------------com.example.Example.java----------------------------------- 

package com.example; 

import java.util.List; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example { 

@SerializedName("status") 
@Expose 
private String status; 
@SerializedName("message") 
@Expose 
private String message; 
@SerializedName("data") 
@Expose 
private List<Datum> data = null; 

public String getStatus() { 
return status; 
} 

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

public String getMessage() { 
return message; 
} 

public void setMessage(String message) { 
this.message = message; 
} 

public List<Datum> getData() { 
return data; 
} 

public void setData(List<Datum> data) { 
this.data = data; 
} 

} 
-----------------------------------com.example.Metadata.java----------------------------------- 

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Metadata { 

@SerializedName("id") 
@Expose 
private String id; 
@SerializedName("channel_id") 
@Expose 
private String channelId; 
@SerializedName("channel_name") 
@Expose 
private String channelName; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

public String getChannelId() { 
return channelId; 
} 

public void setChannelId(String channelId) { 
this.channelId = channelId; 
} 

public String getChannelName() { 
return channelName; 
} 

public void setChannelName(String channelName) { 
this.channelName = channelName; 
} 

} 
0

시도를 jsonlint.com하는 JSON 넣어주세요 당신

public class TvChannel { 
private String status; 
private String message; 
ArrayList<Data> data; 
... 
} 
public class Data 
{ 
    String channel; 
    int date; 
    Metadata metadata; 
    String[] promos;//of course, if that's string array 
} 

public class Metadata 
{ 
    String id; 
    String channel_id; 
    String channel_name; 
} 

그리고 당신과 같이 데이터를 얻을 수 있습니다 : ') 수입했습니다

TvChannel tvChannel = response.body(); 
String metadataId = tvChannel.data.get(index).metadata.id; 
관련 문제