2017-09-26 859 views
0

在Java中,使用Jackson ObjectMapper,我试图反序列化从Dynamo数据流中读取的一个Dynamo数据库对象。使用Underscore反序列化主键值:意外的字符预期的空间分隔根级值

我第一次打电话: record.getDynamodb().getNewImage().get("primaryKey").getS().toString() 从流中返回“1_12345”的primaryKey值。

然后我用它在对象映射器来创建新实例的度量与PrimaryKey的成员集对象:objectMapper.readValue("1_12345", Metrics.class);

的问题是我得到的是通话异常: Unexpected character ('_' (code 95)): Expected space separating root-level values

指标.class是一个没有构造函数的简单POJO。我想知道是否在readValue调用中需要任何特殊注释或转义字符。我似乎无法找到有关此错误解决方案的明确迹象。 (注意 - 我无法直接从json解析它的原因是因为json的结构从流中解析出来并不简单,值看起来像这样,S表示字符串,N表示数字等。 : {primaryKey={S: 1_12345,}, rangeKey={N: xxx}... etc. }

+0

'1_12345'不是有效的JSON。你的“Metrics”对象是什么样的? json将不得不在结构上匹配它。 – teppic

回答

0

谢谢,这是问题,readValue()调用采用JSON格式的字符串。解决的办法是转换发电机流图像为&地图(使用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); 
} 
相关问题