【问题标题】:Can not deserialize instance of java.util.ArrayList out of STATT_OBJECT token无法从 STATT_OBJECT 令牌中反序列化 java.util.ArrayList 的实例
【发布时间】:2021-06-09 10:50:51
【问题描述】:

我正在尝试使用 Jackson 将 JSON 反序列化为对象,但错误提示

“处理服务器错误:无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例”

JSON 具有这种结构

[{
        "id": 685509210310,
        "intention_id": 13042,
        "cuit": "133423122",
        "branch": "Local",
        "checkout": "7",
        "establishment_id": "21312",
        "transaction_datetime": "2021-03-10T17:07:10",
        "payment_method_id": 1,
        "payment_method_code": "VI",
        "payment_method_type": "credit_card",
        "card_data": {
            "card_brand": "Visa",
            "bin": "1211111",
            "last_four_digits": "0000",
            "bank_data": {
                "id": 1,
                "description": "Banco"
            }
        },
        "amount": 1200.00,
        "currency": "ARS",
        "installments": 1,
        "status": "approved",
        "status_details": {
            "card_authorization_code": "11111",
            "card_reference_number": " 00000",
            "response": {
                "type": "approved",
                "reason": {
                    "id": 0,
                    "description": "APROBADA (authno)",
                    "ticket_footer": "INFO ADICIONAL "
                }
            }
        },
        "terminal_data": {
            "trace_number": 43,
            "ticket_number": 121,
            "terminal_number": "87212121"
        }
    }
]

我正在尝试将其反序列化到我的对象中,该对象具有内部 JSON 的其他类的列表,但它不起作用

转换方法是

Collection read = new ObjectMapper().readValue(new_salida, new TypeReference<Collection>() {});

【问题讨论】:

标签: java json


【解决方案1】:

您可以将TypeReference 用于List&lt;YourObject&gt; 并将其提供给ObjectMapper

这是我的做法:

class SampleCardData {
    @JsonProperty
    private Long id;
    @JsonProperty("intention_id")
    private Long intention_id;

   ...ignored other properties...

    @Override
    public String toString() {
        return "SampleCardData{" +
                "id=" + id +
                ", intention_id=" + intention_id +
                '}';
    }
}

public class SampleParseSF {
    public static void main(String[] args) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper()
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        TypeReference<List<SampleCardData>> arrayTypeRef = new TypeReference<List<SampleCardData>>() {
        };
        File file = new File("type-ref.json");
        List<SampleCardData> sampleCardDataList = objectMapper.readValue(file, arrayTypeRef);
        System.out.println(sampleCardDataList);
    }
}

【讨论】:

    【解决方案2】:

    我通过这一行找到了答案

    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

    【讨论】:

      【解决方案3】:

      我认为它不会像你尝试的那样工作

      这是正确的方法

      Collection<YourObject> read = new ObjectMapper().readValue(new_salida, YourObject[].class);
      

      并且必须定义YourObject,以便它可以保存您期望的json值

      >  {
      >       "id":685509210310,
      >       "intention_id":13042,
      >       "cuit":"133423122",
      >       "branch":"Local",
      >       "checkout":"7",
      >       "establishment_id":"21312",
      >       "transaction_datetime":"2021-03-10T17:07:10",
      >       "payment_method_id":1,
      >       "payment_method_code":"VI",
      >       "payment_method_type":"credit_card",
      >       "card_data":{
      >          "card_brand":"Visa",
      >          "bin":"1211111",
      >          "last_four_digits":"0000",
      >          "bank_data":{
      >             "id":1,
      >             "description":"Banco"
      >          }
      >       },
      >       "amount":1200.00,
      >       "currency":"ARS",
      >       "installments":1,
      >       "status":"approved",
      >       "status_details":{
      >          "card_authorization_code":"11111",
      >          "card_reference_number":" 00000",
      >          "response":{
      >             "type":"approved",
      >             "reason":{
      >                "id":0,
      >                "description":"APROBADA (authno)",
      >                "ticket_footer":"INFO ADICIONAL "
      >             }
      >          }
      >       },
      >       "terminal_data":{
      >          "trace_number":43,
      >          "ticket_number":121,
      >          "terminal_number":"87212121"
      >       }    }
      

      【讨论】:

        猜你喜欢
        • 2014-01-17
        • 2017-03-02
        • 2021-03-26
        • 2017-09-22
        • 2020-02-20
        • 2018-02-03
        • 2019-10-16
        相关资源
        最近更新 更多