使用下划线反序列化主键值:意外的字符分隔根级别值的预期空间

时间:2017-09-26 23:51:41

标签: java jackson objectmapper amazon-dynamodb-streams

在Java中,使用Jackson ObjectMapper,我正在尝试反序列化从发电机数据库流中读取的发电机数据库对象。

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

然后我在对象映射器中使用它来创建具有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表示String,N表示数字等: {primaryKey={S: 1_12345,}, rangeKey={N: xxx}... etc. }

1 个答案:

答案 0 :(得分:0)

谢谢,这就是问题,readValue()调用采用JSON格式的String。解决方案是将发电机流式传输图像转换为列表和列表。映射(使用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); 
}