Json 使用 jackson 或 Gson 解析
Json parsing using jackson or Gson
如何使用 jackson
或 Gson
将相同的 json 对象键解析为 2 个不同的模型 classes?
这是输入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"
}
]
}
这些是型号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
}
请为全局添加 object object
Class ResultJson{
String last_sync_dt;
ArrayList<MeetingInfo> meetings_info;
}
MeetingInfo 将是
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;
}
}
客户信息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;
}
}
会议解串器
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;
}
}
最后调用 json 字符串到 object
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MeetingInfo.class, new MeetingInfoAutho());
Gson gson = gsonBuilder.create();
ResultJson resultObject = gson.fromJson(jsonStr, ResultJson.class);
您应该创建实现 JsonDeserializer 的 MeetingInfoAutho。请查找有关 JsonDeserializer GSON 的一些示例以获取更多信息。
这将给出准确的结果。
这是您使用 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
}
在你的 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
}
最后是您收到 json 回复的地方。
Type type = new TypeToken<RootClass>() {}.getType();
RootClass rootClass = ServerController.gson.fromJson(responseObject.toString(), type);
您可以使用此 link 通过 jackson 或 Gson 解析 JSON。
它将创建您的 class automatically.just 将您的 JSON 粘贴到那里。
这里最好的方法是,你可以根据url为Gson或Jackson生成模型class,然后你可以直接在模型[=中设置Json数据21=] 使用 Gson 或 Jackson 库。
Link 用于生成模型:http://www.jsonschema2pojo.org/
我是 Genrating 模型 class 以供您回复。
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;
}
}
现在您可以直接在模型 class 中设置数据,例如 Bellow
Example example = new Gson().fromJson(jsonRespons, new TypeToken<Example>() {
}.getType());
如何使用 jackson
或 Gson
将相同的 json 对象键解析为 2 个不同的模型 classes?
这是输入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"
}
]
}
这些是型号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
}
请为全局添加 object object
Class ResultJson{
String last_sync_dt;
ArrayList<MeetingInfo> meetings_info;
}
MeetingInfo 将是
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;
}
}
客户信息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;
}
}
会议解串器
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;
}
}
最后调用 json 字符串到 object
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MeetingInfo.class, new MeetingInfoAutho());
Gson gson = gsonBuilder.create();
ResultJson resultObject = gson.fromJson(jsonStr, ResultJson.class);
您应该创建实现 JsonDeserializer 的 MeetingInfoAutho。请查找有关 JsonDeserializer GSON 的一些示例以获取更多信息。 这将给出准确的结果。
这是您使用 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
}
在你的 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
}
最后是您收到 json 回复的地方。
Type type = new TypeToken<RootClass>() {}.getType();
RootClass rootClass = ServerController.gson.fromJson(responseObject.toString(), type);
您可以使用此 link 通过 jackson 或 Gson 解析 JSON。 它将创建您的 class automatically.just 将您的 JSON 粘贴到那里。
这里最好的方法是,你可以根据url为Gson或Jackson生成模型class,然后你可以直接在模型[=中设置Json数据21=] 使用 Gson 或 Jackson 库。
Link 用于生成模型:http://www.jsonschema2pojo.org/
我是 Genrating 模型 class 以供您回复。
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;
}
}
现在您可以直接在模型 class 中设置数据,例如 Bellow
Example example = new Gson().fromJson(jsonRespons, new TypeToken<Example>() {
}.getType());