当前位置: 首页 > 面试题库 >

如何在Jackson中以数组开头反序列化JSON文件?

浦思源
2023-03-14
问题内容

我有一个看起来像这样的Json文件

[
    { "field":"val" },
....
]

我有Java对象代表单个对象和它们的集合:

public class Objects{

    public Collection<List> myObject;
}

我想使用来反序列化JSON ObjectMapper

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(in, Objects.class);

但是我得到:

11-24 23:19:19.828: W/UpdateService(6084): org.codehaus.jackson.map.JsonMappingException: 
Can not deserialize instance of com.project.my.Objects out of START_ARRAY token

问题答案:

尝试

   mapper.readValue(in, ObjectClass[].class);

其中ObjectClass类似于:

  public class ObjectClass {
    String field;

    public ObjectClass() { }

    public void setField(String value) {
      this.field = value;
    }
  }

注意:在您发布的Objects课程版本中,您声明的不是列表集(即列表列表)。您可能想要一个List<ObjectClass>。但是,YourObject[].class与Jackson
进行反序列化之后再转换为列表,则要做的事情要简单得多。



 类似资料:
  • 我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为

  • 我似乎很专注于如何去硬化数组数组。我对这些工具很陌生,无法处理JSON文件,我能够去硬化来自国家(https://restcountries.eu/rest/v2/all)的REST应用编程接口的JSON,但我现在正试图从开放天空应用编程接口(https://opensky-network.org/api/states/all?lamin=45.8389 我有这门课: 有能手和二传手 还有这个:

  • 编辑:应你们中一些人的要求,我发布了我的真实数据结构和类。我没能让你更容易理解这个问题。 我在解决JacksonJSON数组元素时遇到问题,最终出现异常,我将在本文后面报告。 我有一个来自第三方提供商的冗长的JSON字符串: 我的Java合奏如下。 这是最外层的容器: 这是第一级容器: 这是最里面的层次: 最后,这是我的反序列化代码: 在极端综合法中,我试图将问题概括如下: 类有一个模块成员,它是

  • 我将用混合对象序列化/反序列化对象数组。因此,我创建了一个MyList类,并用字符串、int和date对象填充items数组。与jackson的连载效果很好。json字符串如下所示: 但是在反序列化时,json字符串date被解析为整数。因此,我创建了一个自己的类MyDate,将日期包装为字段名为“date”的json对象。新的结果是: 现在结果是LinkedHashMap。 以下是我的代码示例:

  • 我正在尝试反序列化列表通量 我已经研究了这个问题,它涉及一系列对象。事实上,我已经能够使用他们的Mono解决方案方法来检索Mono 当我尝试使用Flux而不是Mono时会发生什么:我已经尝试过使用WebClient和Mign-两者的效果相同。单步执行Jackson代码,在处理Flux世界时它永远不会拉回TokenBuffers。这似乎与Codecs和Jackson JSON的Spring留档中的内

  • 我有一个具有名称字段的界面,如下所示: 然后我会得到HTTP 400错误请求错误代码,其中包含以下异常日志: 抽象类型只能用附加类型信息实例化 模块的层次结构是模块B依赖于模块a。我尝试使用@JsonTypeInfo,但模块之间的依赖关系是一个限制,不允许我在@JsonSubtypes注释中为类C中的字段f使用BField.class。