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

Jackson:实例化列表中的Java对象从JSON对象更改名称?

郎慎之
2023-03-14

我试图使用Jackson将JSON blob转换为实例化Java类对象的列表。只要JSON保持不变,这就相当简单了。但是,从服务器返回的每个JSON对象都以唯一的UUID开始,这意味着每个对象都是不同的。是这样的:

{
    "863090b2-3d29-4829-9e01-5b03a6d5df04": {
        "name": "datasource 1",
        "dataSourceId": "863090b2-3d29-4829-9e01-5b03a6d5df04",
        "lastmodified": "2015-06-30T14:53:12"
    },
    "40de3a9e-e436-41b1-a37d-8c1d548293bc": {
        "name": "datasource 2",
        "dataSourceId": "40de3a9e-e436-41b1-a37d-8c1d548293bc",
        "lastmodified": "2015-06-30T14:52:46"
    },
    "f042db5f-455d-4edb-b8b5-610767735e64": {
        "name": "datasource 3",
        "dataSourceId": "f042db5f-455d-4edb-b8b5-610767735e64",
        "lastmodified": "2015-06-30T14:53:05"
    },
    "cd6323aa-ec27-4793-bb16-60729a556b97": {
        "name": "datasource 4",
        "dataSourceId": "cd6323aa-ec27-4793-bb16-60729a556b97",
        "lastmodified": "2015-06-30T14:52:55"
    }
}

请注意,每个JSON对象都以不同的名称开头。如果每个JSON对象都使用相同的名称(如“数据”)而不是UUID启动,那么这将是一个骗局。现在我得到了以下异常:

JAVAlang.RuntimeException:com。fasterxml。杰克逊。数据绑定。JsonMappingException:无法反序列化java实例。util。ArrayList在[Source:[B@20e6c4dc;行:1,列:1]

这是我从获得异常的代码段:

public List<Schema> getAllSchemas(String clientToken) {
    String endpoint = ALL_SCHEMAS_ROUTE + clientToken;
    byte[] responseBodyBytes = makeHttpRequest(endpoint, HttpMethod.GET, null).getBytes();
    List<Schema> allSchemas = null;
    try {
        allSchemas = objectMapper.readValue(responseBodyBytes,
                                            new TypeReference<List<Schema>>(){});
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return allSchemas;
}

请注意,Jackson将取消只包含其中一个对象的Blob,但不会执行整个列表。

我的局限性如下:

  • 我必须使用Jackson,因为整个系统都在使用它
  • 我无法更改服务器将JSON发送回我的方式

非常感谢您的帮助!

共有1个答案

左丘修齐
2023-03-14

我能想到的最有希望的方法是将整个事情反序列化为映射

 类似资料:
  • 问题内容: 我必须从对象列表中序列化JSON。生成的JSON必须看起来像这样: 当我简单地将其序列化时,我缺少类型/键“模型”: 相反,我只是得到这个: 如何为每个对象添加“模型”而不必编写带有属性“模型”的傻包装类? 我的课程如下: 问题答案: 没有内置的方法可以做到这一点。您必须自己编写。就像是 然后注释该字段,以便它使用它 这将序列化为 如果要同时对此序列化和反序列化,则还需要一个自定义的反

  • 我有以下列表,里面是另一个列表,然后是字符串列表 <代码>列表 示例 除了执行嵌套循环并最终替换列表之外,还有更好的方法吗?也许有溪流?

  • 主要内容:1 编写核心类,2 运行测试本文讲解如何将一个Java对象序列化为一个json文件,然后读取该json文件读取回对象。在下面的示例中,我们创建Student类。使用Jackson存储到一个student.json文件,该文件拥有Student对象的JSON表示形式。 1 编写核心类 MainApp: 2 运行测试

  • 假设我有一个DTO类,如下所示: 现在我有一个返回MyDTO对象列表的API。但我想根据一些标准从这个对象列表中过滤掉并获取单个对象MyDTO。(比如属性1==一些值)。 我知道,在获得对象列表后,我可以使用流来实现这一点。但杰克逊有什么办法吗?因此,在我的fiegn客户端调用中,我可以将单个对象作为返回类型。 提前感谢!

  • 我有一个抽象的超类A,我有几个具体的子类B,C,D 在序列化方面,我执行以下操作: 没问题。我现在想反序列化这个。我知道我不能实例化一个抽象类,那么这是如何实现的呢? 这不起作用: 编辑:我把这个添加到我的抽象超类中:(仍然没有运气) 再次编辑:我现在遇到以下错误: 看看JSON,@class不在那里。我怎样才能做到?我试过: 但这并没有奏效。有这方面的例子吗?如何告诉对象映射器对类使用我的注释?

  • 我目前正在开发一个Java web应用程序,它使用Magento REST API公开的JSON数据。api返回的数据示例如下: 我的应用程序中有一个Java类,如下所示: 我想对数据进行反序列化,并将其转换为,但我总是得到以下错误: 这是我用来将JSON响应反序列化为ArrayList的语句行: 有人能分享一些见解吗?我看到一些例子,返回的JSON对象前面没有任何ID。那是因为我做错了什么吗?非