Fastjson: 反序列化问题

Created on 3 Feb 2020  ·  1Comment  ·  Source: alibaba/fastjson

反序列化"{"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

Most helpful comment

第二个不是json格式

>All comments

第二个不是json格式

Was this page helpful?
0 / 5 - 0 ratings