JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了json – 杰克逊反序列化…意外的令牌(END_OBJECT),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将 JSON数组反序列化为使用Jackson的Java Collection.这个动机来自于这个问题的答案,我昨晚 Can I instantiate a superclass and have a particular subclass be instantiated based on the parameters supplied问.

我得到的错误是(可换行添加换行符):

org.codehaus.jackson.map.JsonMappingException: 
    Unexpected token (END_OBjeCT),expected FIELD_NAME: missing property 'type'
    that is to contain type id  (for class sempedia.model.query.Queryvalue)
 at [source: java.io.StringReader@325aef; line: 1,column: 175] 
    (through reference chain: sempedia.model.query.QueryPropertY["values"])

我的情况很复杂我的数组包含的对象本身包含一个数组的值.该数组又包含也是对象的值,但不一定相同(因此是多态).

以下是JSON字符串示例:

[
    {
      "id":"74562","uri":"http://dbpedia.org/ontology/family","name":"family","values":[
         {
            "id":"74563","uri":"http://dbpedia.org/resource/Orycteropodidae","name":"Orycteropodidae"
         }
      ],"SELEcted":false
    },{
      "id":"78564","uri":"http://dbpedia.org/ontology/somenumber","name":"somenumber","values":[
         {
            "lower":"45","upper":"975",}
      ],"SELEcted":true
    }
]

我想使用这个(以下)代码或类似的东西来获取一个对象,它是Collection< QueryProperty>的一个实例.我称之为queryProperties

ObjectMapper mapper = new ObjectMapper();  
Collection<QueryProperty> queryProperties = 
   queryProperties = mapper.readValue(query,new TypeReference<Collection<QueryProperty>>(){});

我的反序列化课程(我们没有打印的公共吸烟者/设定者)列在下面:

public class QueryProperty {    
    int id;
    String uri;
    String name;
    Set<QueryValue> values;
    String SELEcted;
}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,property = "type")  
@JsonSubTypes({  
    @Type(value = resourceQueryValue.class),@Type(value = Numeri@R_675_7909@Value.class)
    })  
public abstract class QueryValue {
    String type;
}

resourceQueryValue

public class resourceQueryValue extends QueryValue{
    int id;
    String uri;
    String name;
}

‘Numeri@R_675_7909@Value’相同的JSON不包含此类型的对象.

public class Numeri@R_675_7909@Value extends QueryValue{
    double lower;
    double upper;
}

堆栈跟踪的初始部分:

org.codehaus.jackson.map.JsonMappingException: Unexpected token (END_OBjeCT),expected FIELD_NAME: missing property 'type' that is to contain type id  (for class sempedia.model.query.Queryvalue)
 at [source: java.io.StringReader@325aef; line: 1,column: 175] (through reference chain: sempedia.model.query.QueryPropertY["values"])
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.wrongTokenException(StdDeserializationContext.java:240)
    at org.codehaus.jackson.map.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:86)
    at org.codehaus.jackson.map.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:89)

解决方法

经常发生的时候,写出一个问题可以帮助你看到解决方案.所以我需要做两件事情.

首先,我需要将类型信息添加到JSON中 – 这不是我真正想要做的,但我想你需要在某个地方提供这些信息.

然后我需要编辑QueryValue上的注释为:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,property = "type")  
@JsonSubTypes({  
    @Type(value = resourceQueryValue.class,name = "resourceQueryValue"),@Type(value = Numeri@R_675_7909@Value.class,name= "Numeri@R_675_7909@Value")
    })

大佬总结

以上是大佬教程为你收集整理的json – 杰克逊反序列化…意外的令牌(END_OBJECT),全部内容,希望文章能够帮你解决json – 杰克逊反序列化…意外的令牌(END_OBJECT),所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。