当前位置: 首页 > 知识库问答 >
问题:

Json 映射异常无法从START_ARRAY令牌反序列化实例

顾涵衍
2023-03-14

我试图将我的json请求解析到我的模型。我不知道,这段代码有什么问题。json的语法看起来是正确的,Java模型上的注释也是正确的。我不知道为什么会出现这样的错误:

Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of ParametersType out of START_ARRAY token
(through reference chain: Document["parameters"])

爪哇模型:

@JsonIgnoreProperties( ignoreUnknown = true )
public class Document {

   @XmlElement( required = true )
   @JsonProperty( "templateId" )
   protected String templateId;

   @JsonProperty( "parameters" )
   @XmlElement( required = true )
   protected ParametersType parameters;

   @JsonProperty( "documentFormat" )
   @XmlElement( required = true )
   protected DocumentFormatType documentFormat;
    
...}

@JsonIgnoreProperties( ignoreUnknown = true )
public class ParametersType {

    @JsonProperty( "parameter" )
    protected List<ParameterType> parameter;
     
...}

@JsonIgnoreProperties( ignoreUnknown = true )
public class ParameterType {

    @XmlElement( required = true )
    @JsonProperty( "key" )
    protected String key;

    @XmlElement( required = true )
    @JsonProperty( "value" )
    @XmlSchemaType( name = "anySimpleType" )
    protected Object value;

    @JsonProperty( "type" )
    @XmlElement( required = true, defaultValue = "STRING_TYPE" )
    protected ParamType type;

....}

json代码:

{
    "templateId": "123",
    "parameters": [
        {
            "parameter": [
                {
                    "key": "id",
                    "value": "1",
                    "type": "STRING_TYPE"
                },
                {
                    "key": "id2",
                    "value": "12",
                    "type": "STRING_TYPE"
                }
            ]
        }
    ],
    "documentFormat": "PDF"
}

共有2个答案

朱锦
2023-03-14

在你的pojo课上做了几次修改,

1)

公共类参数类型{

@JsonProperty( "parameter" )
protected List<ParameterType> parameter;

...}

公共类参数{

@JsonProperty( "parameter" )
protected List<Parameter> parameter;

...}

梁祯
2023-03-14

您已将参数声明为单个对象,但在 JSON 文档中将其作为多个对象的数组返回。

您的模型当前将参数节点定义为ParametersType对象:

@JsonProperty( "parameters" )
@XmlElement( required = true )
protected ParametersType parameters;

这意味着您的模型对象需要类似于以下内容的JSON文档:

{
    "templateId": "123",
    "parameters": {
            "parameter": [
                {
                    "key": "id",
                    "value": "1",
                    "type": "STRING_TYPE"
                },
                {
                    "key": "id2",
                    "value": "12",
                    "type": "STRING_TYPE"
                }
            ]
        },
    "documentFormat": "PDF"
}

但是在JSON文档中,您返回的是< code>ParametersType对象的数组。因此,您需要将您的模型更改为ParametersType对象列表:

@JsonProperty( "parameters" )
@XmlElement( required = true )
protected List<ParametersType> parameters;

您返回一个 ParametersType 对象数组的事实就是分析器抱怨无法从START_ARRAY反序列化对象的原因。它正在寻找具有单个对象的节点,但在 JSON 中找到了一个对象数组

 类似资料:
  • 我需要向网络服务发送帖子请求,但它在异常后返回。 实际服务器响应如下: 我根据以下内容发送请求 我的代码

  • 问题内容: 我正在尝试将json请求解析为模型。我不知道这段代码有什么问题。json的语法看起来正确,并且在Java模型上也有注释。我不知道为什么会出现如下错误: Java模型: 杰森代码: 问题答案: 您已声明为单个对象,但是将其作为JSON文档中多个对象的数组返回。 您的模型当前将parameters节点定义为一个对象: 这意味着您的模型对象需要一个如下所示的JSON文档: 但是在JSON文档

  • 我尝试使用jacksonapi解析json,并提供以下详细信息。但我错了。请查找以下代码和堆栈跟踪的详细信息。 JSON 控制器类 下面这个类是我的bean类。PublisheData.java 发布数据列表.java 我收到以下错误。

  • 下面是POJO类: 主要功能如下:

  • 下面是我的JSON响应, 原因:com.fasterxml.jackson.databind.JSONMappingException:无法反序列化[source:java.io.pushbackInputStream@bce1d9;行:1,列:556]处START_OBJECT标记外的java.util.ArrayList实例(通过引用链:com.totalhours[“data”]->com.

  • 问题内容: 我正在使用来自外部合作伙伴的API。不幸的是,返回的响应似乎没有固定的结构。理想情况下,API合同意味着它不会被违反,但是这种情况一直在发生。 无论如何,所以发生的事情是JSON响应中的字段主要是一个地图,但有时却是一个列表。 例如,假设以下是我通常得到的响应: 但是在极少数情况下,我会得到列表,而不是地图或其他违反合同的情况。 例如: 我正在使用杰克逊将此响应映射到POJO。在某些情