我正在尝试使用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对象都以不同的名称开头。如果要使用相同的名称(例如" data")而不是使用UUID来启动每个JSON对象,那么这将是一个小步骤。现在我得到以下异常:
java.lang.RuntimeException:com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT标记中反序列化java.util.ArrayList的实例 在[来源:[B @ 20e6c4dc; line:1,column: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;
}
请注意,杰克逊将对仅包含其中一个对象的blob进行分解,但不会对整个列表进行分类。
我的局限是这些:
非常感谢您的帮助!
答案 0 :(得分:3)
我能想到的最有希望的方法是将整个事件反序列化为Map<String, Schema>
,因此这些ID不再被视为字段。