简体   繁体   中英

Json parsing using jackson or Gson

How to parse same json object keys to 2 different model classes using jackson or Gson ?

This is input json

 {
      "last_sync_dt": "1486711867749",
      "meetings_info": [
        {
          "date": "2017-01-15",
          "meeting_id": "1",
          "subject": "Product Review with AUDI",
          "customer_id": "32",
          "customer_name": "David"
        }
      ]
    }  

These are model class

@JsonIgnoreProperties(ignoreUnknown = true)
Class MeetingInfo{
    @JsonProperty("date")
    private String date;
    @JsonProperty("meeting_id")
    private String meetingId;
    @JsonProperty("subject")
    private String subject;

    CustomerInfo customerinfo; 


//Other fields and getter setter


}

class CustomerInfo{
    @JsonProperty("customer_id")
    private String id;
   @JsonProperty("customer_name")
    private String name;

//Other fields and getter setter
}

here is an example from your code using gson.

@JsonIgnoreProperties(ignoreUnknown = true)
Class RootClass {
    @JsonProperty("last_sync_dt")
    private String date;
    @JsonProperty("meetings_info")
    ArrayList<MeetingInfo> meetingInfo;
    // as you are having json array of meeting info in root 


//Other fields and getter setter


}

and in your MeetingInfo class

class MeetingInfo{
    @JsonProperty("date")
    private String date;
   @JsonProperty("meeting_id")
    private String meetingId;
   @JsonProperty("subject")
    private String subject;
   @JsonProperty("customer_name")
    private String cName;
   @JsonProperty("customer_id")
    private String cId;

//Other fields and getter setter
} 

and finally where you are getting json response.

Type type = new TypeToken<RootClass>() {}.getType();
RootClass rootClass = ServerController.gson.fromJson(responseObject.toString(), type);

please add object for global object

Class ResultJson{
  String last_sync_dt;
  ArrayList<MeetingInfo> meetings_info;
}

and MeetingInfo will be

public class MeetingInfo {
    private String date;
    private String meeting_id;
    private String subject;
    private CustomerInfo customerInfo;

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

    public void setMeeting_id(String meeting_id) {
        this.meeting_id = meeting_id;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public void setCustomer(CustomerInfo customer) {
        customerInfo = customer;
    }
}

Customer info class

public class CustomerInfo {
    private String customer_id;
    private String customer_name;

    public void setCustomerId(String customer_id) {
        this.customer_id = customer_id;
    }

    public void setCustomerName(String customer_name) {
        this.customer_name = customer_name;
    }
}

Meeting deserializer

public class MeetingInfoAutho implements JsonDeserializer<MeetingInfo>{

    @Override
    public MeetingInfo deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        JsonObject jObject = jsonElement.getAsJsonObject();
        MeetingInfo info = new MeetingInfo();
        CustomerInfo customer = new CustomerInfo();
        customer.setCustomerId(jObject.get("customer_id").getAsString());
        customer.setCustomerName(jObject.get("customer_name").getAsString());
        info.setDate(jObject.get("date").getAsString());
        info.setMeeting_id(jObject.get("meeting_id").getAsString());
        info.setSubject(jObject.get("subject").getAsString());
        info.setCustomer(customer);
        Log.e("info", jObject.toString());
        return info;
    }
}

and final call to json string to object

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MeetingInfo.class, new MeetingInfoAutho());
Gson gson = gsonBuilder.create();
ResultJson resultObject = gson.fromJson(jsonStr, ResultJson.class);

You should create MeetingInfoAutho which implements JsonDeserializer. Please find some examples about JsonDeserializer GSON for more info. This will give exact result.

you can use this link for parsing JSON using jackson or Gson. it will create your class automatically.just paste your JSON over there.

Link : http://www.jsonschema2pojo.org/

Here the best way to do it, you can generate model class for Gson or Jackson from following url, then after you can set Json data in directly model class using Gson or Jackson library.

Link for Generate Model : http://www.jsonschema2pojo.org/

Here I am Genrating model class for your response.

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

public class Example {

@SerializedName("last_sync_dt")
@Expose
private String lastSyncDt;
@SerializedName("meetings_info")
@Expose
private List<MeetingsInfo> meetingsInfo = null;

public String getLastSyncDt() {
return lastSyncDt;
}

public void setLastSyncDt(String lastSyncDt) {
this.lastSyncDt = lastSyncDt;
}

public List<MeetingsInfo> getMeetingsInfo() {
return meetingsInfo;
}

public void setMeetingsInfo(List<MeetingsInfo> meetingsInfo) {
this.meetingsInfo = meetingsInfo;
}

}
/*-----------------------------------com.example.MeetingsInfo.java-----------------------------------*/

package com.example;

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

public class MeetingsInfo {

@SerializedName("date")
@Expose
private String date;
@SerializedName("meeting_id")
@Expose
private String meetingId;
@SerializedName("subject")
@Expose
private String subject;
@SerializedName("customer_id")
@Expose
private String customerId;
@SerializedName("customer_name")
@Expose
private String customerName;

public String getDate() {
return date;
}

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

public String getMeetingId() {
return meetingId;
}

public void setMeetingId(String meetingId) {
this.meetingId = meetingId;
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getCustomerId() {
return customerId;
}

public void setCustomerId(String customerId) {
this.customerId = customerId;
}

public String getCustomerName() {
return customerName;
}

public void setCustomerName(String customerName) {
this.customerName = customerName;
}

}

now after that you can directly set your data in model class like Bellow

Example example = new Gson().fromJson(jsonRespons, new TypeToken<Example>() {
                    }.getType());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM