改进JSON数组解析

时间:2016-03-16 16:35:43

标签: java json gson retrofit2

无法理解如何解析这个json数组。

[{ “ID”: “154”, “导通时间”: “2016年3月15日”, “不工作时间”: “2016年4月14日”, “usluga_id”: “2”, “名称”:” 50mpbs”, “时期”: “30”, “成本”: “300”},

{ “ID”: “152”, “导通时间”: “2016年3月15日”, “不工作时间”: “2016年4月14日”, “usluga_id”: “4”, “名称”:“TV60 ”, “时期”: “30”, “成本”: “100”},

{ “ID”: “156”, “导通时间”: “2016年3月15日”, “不工作时间”: “2016年4月4日”, “usluga_id”: “5”, “名称”:“TV120 ”, “时期”: “20”, “成本”: “200”},

{ “ID”: “153”, “导通时间”: “2016年3月15日”, “不工作时间”: “2016年3月30日”, “usluga_id”: “6”, “名称”:“SMS -check”, “时期”: “15”, “成本”: “50”}]

@Generated( “org.jsonschema2pojo”)

public class UserService {
@SerializedName("id")
@Expose
private String id;
@SerializedName("ontime")
@Expose
private String ontime;
@SerializedName("offtime")
@Expose
private String offtime;
@SerializedName("usluga_id")
@Expose
private String uslugaId;
@SerializedName("name")
@Expose
private String name;
@SerializedName("period")
@Expose
private String period;
@SerializedName("cost")
@Expose
private String cost;

/**
 *
 * @return
 * The id
 */
public String getId() {
    return id;
}

/**
 *
 * @param id
 * The id
 */
public void setId(String id) {
    this.id = id;
}

/**
 *
 * @return
 * The ontime
 */
public String getOntime() {
    return ontime;
}

/**
 *
 * @param ontime
 * The ontime
 */
public void setOntime(String ontime) {
    this.ontime = ontime;
}

/**
 *
 * @return
 * The offtime
 */
public String getOfftime() {
    return offtime;
}

/**
 *
 * @param offtime
 * The offtime
 */
public void setOfftime(String offtime) {
    this.offtime = offtime;
}

/**
 *
 * @return
 * The uslugaId
 */
public String getUslugaId() {
    return uslugaId;
}

/**
 *
 * @param uslugaId
 * The usluga_id
 */
public void setUslugaId(String uslugaId) {
    this.uslugaId = uslugaId;
}

/**
 *
 * @return
 * The name
 */
public String getName() {
    return name;
}

/**
 *
 * @param name
 * The name
 */
public void setName(String name) {
    this.name = name;
}

/**
 *
 * @return
 * The period
 */
public String getPeriod() {
    return period;
}

/**
 *
 * @param period
 * The period
 */
public void setPeriod(String period) {
    this.period = period;
}

/**
 *
 * @return
 * The cost
 */
public String getCost() {
    return cost;
}

/**
 *
 * @param cost
 * The cost
 */
public void setCost(String cost) {
    this.cost = cost;
}
public class ServicesArray {

private List<UserService> services;
public ServicesArray(){};

public List<UserService> getServices() {
    return services;
}

public void setServices(List<UserService> services) {
    this.services = services;
}

活动......

public void GetUserServices(){

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://cybergenesis.ru/egor/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    APIService service = retrofit.create(APIService.class);

    Call<ServicesArray> call = service.getUserServices("egoraa");

    call.enqueue(new Callback<ServicesArray>() {
        @Override
        public void onResponse(Call<ServicesArray> call, retrofit2.Response<ServicesArray> response) {
            String[] services = new String[response.body().getServices().size()];
            response.body().getServices().toArray(services);
        Log.d(TAG,"OKKKK");
        }

        @Override
        public void onFailure(Call<ServicesArray> call, Throwable t) {
            Log.d(TAG,"ERROR PROFIT");
        }
    });
}

日志:D /主屏幕:错误利润

响应为空,我的问题是什么?

3 个答案:

答案 0 :(得分:0)

您发布的JSON是一个用户列表,因此您不应该将ServicesArray类解析,而应该将其视为User个对象的列表:

  Type type = new TypeToken<Collection<User>>(){}.getType();
  List<User> users = new Gson().fromJson(jsonString,type);

而不是:

  List<User> users = new Gson().fromJson(jsonString,User.class);

答案 1 :(得分:0)

您有一系列用户。使用此作为服务回调的返回类型。数组在改造中映射到List。

public class UserList{

private List<User>users;

public UserList(){};

public List<User>getUsers() {
return users;
}

 public void setUsers(List<User>users) {
  this.users= users;
 }
} 

答案 2 :(得分:0)

如果所有响应都是json格式的

,您可以在所有响应中设置GSON Converter
        Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)    
           .addConverterFactory(GsonConverterFactory.create(builder.create()))
            .build();