我有一个使用3个不同对象的JSON对象。

{ // Class A
"name" : "Name",
"list" : {
    "names" : { //Class B
        "scale1" : { //Class C
            "max" : 10,
            "min" : 0
        },
        "scale2" : { //Class C
            "max" : 20,
            "min" : 15
        }
    }
} }

类A包含Map ,类B包含Map 。我遇到的问题是我为类B有一个自定义解串器,但我想为类C使用默认的解串器。

我想要这样的东西:
public class BDeserializer extends JsonDeserializer<B> {
@Override
public B deserialize(JsonParser arg0, DeserializationContext arg1)
        throws IOException, JsonProcessingException {
    B bObject = new B();
    while(!arg0.isClosed()){
        C cObject = CDeserializer.deserialize()
        bObject.names.add(cObject);
    }
    return bObject;
} }

但是我不确定将哪些参数传递给CDeserializer,或者我是否可以调用C类的默认解串器。

这些类大致如下:
public class A {
String name;
Map<String,B> list = new HashMap<String,B>();

//getters & setters

}
public class B {
String name;
Map<String,C> fields = new HashMap<String,C>();

//getters & setters

}

public class C {
String name;
long min;
long max;

//getters & setters

}

最佳答案

您可以使用JsonParser对象读取所有属性。请参见以下示例:

class BJsonDeserializer extends JsonDeserializer<B> {

    @Override
    public B deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
        B result = new B();
        result.setFields(new HashMap<String, C>());

        while (parser.nextToken() != JsonToken.END_OBJECT) {
            String name = parser.getCurrentName();
            if ("scale1".equals(name) || "scale2".equals(name) || "anotherProperty".equals(name)) {
                parser.nextToken();
                result.getFields().put(name, parser.readValueAs(C.class));
            }
        }
        return result;
    }
}
  • Jackson JSON Processing API in Java Example Tutorial
  • 10-06 09:08