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

如何使用骆驼杰克逊将JSONArray转换为对象列表

国晟睿
2023-03-14
问题内容

正在具有json数组的String如下

{"Compemployes":[
    {
        "id":1001,
        "name":"jhon"
        },
        {
                "id":1002,
        "name":"jhon"
        }
]}

我想将此jsonarray转换为List<Empolyee>。为此,我添加了maven依赖项“ camel- jackson”,还为员工编写了pojo类。但是当我尝试运行下面的代码

 ObjectMapper mapper = new ObjectMapper();
 List<Employe> list = mapper.readValue(jsonString, TypeFactory.collectionType(List.class, Employe.class));

正在收到以下异常。

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: java.io.StringReader@43caa144; line: 1, column: 1]

有人可以告诉我丢失了什么或做错了什么吗


问题答案:

问题不在您的代码中,而在您的json中:

{"Compemployes":[{"id":1001,"name":"jhon"}, {"id":1002,"name":"jhon"}]}

这表示一个包含属性Compemployes的对象,该属性是Employee的列表。在这种情况下,您应该创建该对象,例如:

class EmployeList{
    private List<Employe> compemployes;
    (with getter an setter)
}

并反序列化json只需执行以下操作:

EmployeList employeList = mapper.readValue(jsonString,EmployeList.class);

如果您的json应该直接代表员工列表,则它应该类似于:

[{"id":1001,"name":"jhon"}, {"id":1002,"name":"jhon"}]

最后备注:

List<Employee> list2 = mapper.readValue(jsonString, 
TypeFactory.collectionType(List.class, Employee.class));

TypeFactory.collectionType弃用, 您现在应该使用类似以下内容的方法:

List<Employee> list = mapper.readValue(jsonString,
TypeFactory.defaultInstance().constructCollectionType(List.class,  
   Employee.class));


 类似资料:
  • 问题内容: 使用以下代码,我已将列表转换为json,但格式如下: 但我想将其转换为: 以下是我的弹簧控制器: 问题答案: 更改从返回结果给放: 如此; 更新 您可以将结果作为字符串返回,您将获得所需的内容: 返回的字符串是json格式。

  • 问题内容: 我想使用杰克逊将下面的json数组转换为java hashmap并迭代如下值: 需要这样的输出: JSON示例:在此处输入代码 如果有人可以共享代码以实现此目标,将不胜感激。 谢谢你的帮助! 问题答案: 这是一个揭示想法的解决方案:

  • 问题内容: 我将JSON库从org.json更改为Jackson,我想迁移以下代码: 现在在杰克逊,我有以下几点: 但是我不喜欢那里的演员,有可能吗?有没有一种等效于的方法,以便在不是数组的情况下进行适当的错误处理? 问题答案: 是的,Jackson手动解析器的设计与其他库完全不同。特别是,您会注意到它具有通常与其他API的数组节点关联的大多数功能。因此,您无需强制转换为即可使用。这是一个例子:

  • 问题内容: 我正在使用Jackson 将Java Bean转换为。 但是,它不是保留对象,而是将其转换为。 这是失败的测试用例, 有一个简单的解决方案吗? 问题答案: 默认情况下,Jackson将实例序列化为数字时间戳。您可以将Jackson配置为使用带有 或提供您自己的。 但是,当您进行转换时,中间JSON和目标类型中绝对没有任何内容可向Jackson表示应将其反序列化为对象。如果没有额外的类型

  • 我的服务以JSONArray的形式收到响应。我想将这个JSONArray转换为JavaObject(使用POJO类)。我使用Jackson API进行JSON到JavaObject的转换。我还为该转换编写了帮助类(类名:JsonUtil)。 请在下面找到我的 JSON 响应,其中包含 JSON 对象以及 JSON 数组。 由此,如果未显示数组,则可以进行转换。如果出现数组,则表示它抛出以下错误。

  • 问题内容: 我如何使用jackson像下面的示例那样创建json数组。 我尝试使用ObjectMapper,但这似乎不正确。 最终,我将制作一个具有以下值的json。 这是我提供的一个示例json。 编辑1 提出以下更接近的json,但我不知道为什么在{}之前和之后加引号。 最终答案 问题答案: 您需要一个: 此类具有创建s,s,s,s,s和诸如此类的方法。s和s具有便捷的变异方法,可以直接添加大