Fadly Dzil
Fadly Dzil

Reputation: 2206

Retrofit - Pass nested json with array

I have tested this in my backend PHP API. The data that will be passed like this:

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

As you can see, the rest_product_weighing_detail is an array.

How to make retrofit will be handle this in post ?

Any advice it so appreciated

Upvotes: 0

Views: 923

Answers (4)

Jenish
Jenish

Reputation: 234

create a class and assign value to it,

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

}

you can generate json pojo class using http://www.jsonschema2pojo.org/

Upvotes: 0

milad salimi
milad salimi

Reputation: 1660

Step 1:

In your Decode class :

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

Step 2:

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

}

Upvotes: 1

shb
shb

Reputation: 6277

  • Create a model class of your json body

Create an object an set your data.

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

Pass the object as body in your api call

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

Upvotes: 1

Selman Tosun
Selman Tosun

Reputation: 438

I think just this handle it for you :

private List<Integer> rest_product_weighing_details;

and also this link may help you: Android retrofit parse nested json response in List

Upvotes: 1

Related Questions