反序列化"{"Preference": "{\"OfficeID\":90,\"WorkGroupID\":70}"}"成功
public static final String json = "{\"Preference\": \"{\\\"OfficeID\\\":90,\\\"WorkGroupID\\\":70}\"}";
//public static final String json = "{}";
public static void main(String[] args) {
OfficeBean bean = JSON.parseObject(json, OfficeBean.class);
System.out.println(bean);
}
反序列化{"Preference": "{"OfficeID":90,"WorkGroupID":70}"}报错
public static final String json = "{\"Preference\": \"{\"OfficeID\":90,\"WorkGroupID\":70}\"}";
//public static final String json = "{}";
public static void main(String[] args) {
OfficeBean bean = JSON.parseObject(json, OfficeBean.class);
System.out.println(bean);
}
public class OfficeBean {
@JSONField(name = "Preference", deserializeUsing = PreferenceDeserializer.class)
private PreferenceBean preferenceBean;
public PreferenceBean getPreferenceBean() {
return preferenceBean;
}
public void setPreferenceBean(PreferenceBean preferenceBean) {
this.preferenceBean = preferenceBean;
}
@Override
public String toString() {
return "OfficeBean{" +
"preferenceBean=" + preferenceBean +
'}';
}
public static class PreferenceBean {
@JSONField(name = "OfficeID")
private int officeID;
@JSONField(name = "WorkGroupID")
private int workGroupID;
public int getOfficeID() {
return officeID;
}
public void setOfficeID(int officeID) {
this.officeID = officeID;
}
public int getWorkGroupID() {
return workGroupID;
}
public void setWorkGroupID(int workGroupID) {
this.workGroupID = workGroupID;
}
@Override
public String toString() {
return "PreferenceBean{" +
"officeID=" + officeID +
", workGroupID=" + workGroupID +
'}';
}
}
public static class PreferenceDeserializer implements ObjectDeserializer {
@Override
public PreferenceBean deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
return JSON.parseObject(parser.getLexer().stringVal(), PreferenceBean.class);
}
@Override
public int getFastMatchToken() {
return 0;
}
}
}
md5-18a5d9f59919f2ec71a6a6fbf886d0c8
Exception in thread "main" com.alibaba.fastjson.JSONException: not match : - , info : pos 1, line 1, column 2{
at com.alibaba.fastjson.parser.JSONLexerBase.nextTokenWithChar(JSONLexerBase.java:394)
at com.alibaba.fastjson.parser.JSONLexerBase.nextTokenWithColon(JSONLexerBase.java:376)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseExtra(DefaultJSONParser.java:1607)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1220)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:866)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1555)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_PreferenceBean.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:284)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:687)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:383)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:287)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:560)
at OfficeBean$PreferenceDeserializer.deserialze(OfficeBean.java:64)
at OfficeBean$PreferenceDeserializer.deserialze(OfficeBean.java:60)
at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:85)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:838)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:288)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:685)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:383)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:287)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:560)
at TestJson.main(TestJson.java:9)
Process finished with exit code 1
第二个不是json格式
Most helpful comment
第二个不是json格式