0

在 Java 中,使用 Jackson ObjectMapper,我试图反序列化从 dynamo db 流中读取的 dynamo db 对象。

我首先调用: record.getDynamodb().getNewImage().get("primaryKey").getS().toString() 从流中获取“1_12345”的primaryKey值。

然后,我在对象映射器中使用它来创建具有 primaryKey 成员集的 Metrics 对象的新实例:objectMapper.readValue("1_12345", Metrics.class);

问题是我在那个电话上遇到了一个例外: Unexpected character ('_' (code 95)): Expected space separating root-level values

Metrics.class 是一个没有构造函数的简单 POJO。我想知道在 readValue 调用中是否需要任何特殊注释或转义字符。在出现此错误的情况下,我似乎找不到任何明确的解决方案。

(旁注 - 我无法直接从 json 解析它的原因是因为从流中解析 json 时的结构并不简单,值看起来像这样,S 表示字符串,N 表示数字等 {primaryKey={S: 1_12345,}, rangeKey={N: xxx}... etc. }:)

4

1 回答 1

0

谢谢,这就是问题所在,readValue() 调用采用 JSON 格式的字符串。解决方案是将 dynamo 流媒体图像转换为列表和地图(使用 dynamodbv2 库),直到其格式正确,如下所示:

Map<String, AttributeValue> newImage = record.getDynamodb().getNewImage(); 
List<Map<String, AttributeValue>> listOfMaps = new ArrayList<Map<String, AttributeValue>>(); 
listOfMaps.add(newImage); 
List<Item> itemList = InternalUtils.toItemList(listOfMaps); 
for (Item item : itemList) { 
  String json = item.toJSON(); 
  Metrics metric = objectMapper.readValue(json, Metrics.class); 
}
于 2017-09-29T22:26:23.417 回答