改造-通过数组传递嵌套的json

时间:2019-05-25 07:05:56

标签: android json retrofit

我已经在后端PHP API中对此进行了测试。 像这样传递的数据:

{
    "driver": "Dzil",
    "vehicle_number": "Jalal",
    "date_unique_number": "2019-09-09",
    "unique_number": "ABCDEF",
    "rest_product_weighing_details": [400,401]
}

如您所见,rest_product_weighing_detail是一个数组。

如何进行改造将在后期处理?

任何对此表示赞赏的建议

4 个答案:

答案 0 :(得分:1)

  • 创建您的json主体的模型类

创建一个对象来设置数据。

public class BodyModel {

@SerializedName("driver")
@Expose
private String driver;
@SerializedName("vehicle_number")
@Expose
private String vehicleNumber;
@SerializedName("date_unique_number")
@Expose
private String dateUniqueNumber;
@SerializedName("unique_number")
@Expose
private String uniqueNumber;
@SerializedName("rest_product_weighing_details")
@Expose
private List<Integer> restProductWeighingDetails = null;
//...
}

在api调用中将该对象作为主体传递

@Headers({"Content-Type: application/json"})
@POST("your/api/endpoint")
Call<ResponseBody> sendDrivingData(@Body BodyModel body);

答案 1 :(得分:1)

我想正是这样为您解决的:

private List<Integer> rest_product_weighing_details;

,此链接也可以帮助您: Android retrofit parse nested json response in List

答案 2 :(得分:1)

第1步:

在您的解码类中:

public class Decode {

private List<Integer> values = new ArrayList<>(); // in json it is "rest_product_weighing_details"

public List<Integer> getValues() {
    return values;
 }

public void setValues(List<Integer> values) {
    this.values = values;
 }
}

第2步:

创建以下JsonDeserializer

public class MyDeserializer implements JsonDeserializer<Decode> {

@Override
public Decode deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
    JsonObject decodeObj = arg0.getAsJsonObject();
    Gson gson = new Gson();
    Decode decode = gson.fromJson(arg0, Decode.class);
    List<Integer> values = null;
    if (decodeObj.get("rest_product_weighing_details").isJsonArray()) {
        values = gson.fromJson(decodeObj.get("rest_product_weighing_details"), new TypeToken<List<Integer>>() {
        }.getType());
    } else {
        Integer single = gson.fromJson(decodeObj.get("rest_product_weighing_details"), Integer.class);
        values = new ArrayList<Integer>();
        values.add(single);
    }
    decode.setValues(values);
    return decode;
 }

}

答案 3 :(得分:0)

创建一个类并为其分配值,

public class Example {

@SerializedName("driver")
@Expose
private String driver;
@SerializedName("vehicle_number")
@Expose
private String vehicleNumber;
@SerializedName("date_unique_number")
@Expose
private String dateUniqueNumber;
@SerializedName("unique_number")
@Expose
private String uniqueNumber;
@SerializedName("rest_product_weighing_details")
@Expose
private List<Integer> restProductWeighingDetails = null;

public String getDriver() {
return driver;
}

public void setDriver(String driver) {
this.driver = driver;
}

public String getVehicleNumber() {
return vehicleNumber;
}

public void setVehicleNumber(String vehicleNumber) {
this.vehicleNumber = vehicleNumber;
}

public String getDateUniqueNumber() {
return dateUniqueNumber;
}

public void setDateUniqueNumber(String dateUniqueNumber) {
this.dateUniqueNumber = dateUniqueNumber;
}

public String getUniqueNumber() {
return uniqueNumber;
}

public void setUniqueNumber(String uniqueNumber) {
this.uniqueNumber = uniqueNumber;
}

public List<Integer> getRestProductWeighingDetails() {
return restProductWeighingDetails;
}

public void setRestProductWeighingDetails(List<Integer> restProductWeighingDetails) {
this.restProductWeighingDetails = restProductWeighingDetails;
}

}

您可以使用http://www.jsonschema2pojo.org/

生成json pojo类