我有一个简单的Java对象,它有一个String属性,其中包含序列化的Java对象:
@Data
private class Test {
int id;
String data;
}
数据是使用
test.setData(mapper.writeValueAsString(anyJavaObjectThatShouldBeSerialized));
然后,我将Test Object发送到另一个服务器,在那里我希望将对象从data属性反序列化为JSONNode:
JsonNode node = mapper.readTree(test.getData());
问题是,readTree的结果是一个TextNode而不是一个JsonNode。因此,我无法访问序列化数据的属性。
问题可能是序列化的对象被解释为String,因为当我打印它时,它周围有引号:
"{\"id\":39,\"name\":\"Im a test value\"}"
如何从包含序列化对象的String中获取JsonNode?请注意,数据可以是ANY Java对象,这就是我将其序列化为String的原因。
1条答案
按热度按时间wr98u20j1#
进行两次反序列化-首先将字符串负载反序列化为json,然后将json反序列化为类,或者在您的情况下为
JsonNode
。正如您所注意到的,原因是您进行了双重序列化-第一次是在设置
data
字段时,然后是在向其他服务器发送数据时。您可以将
data
设为对象,以避免这种双重序列化/还原序列化。第一个
像这样,它将被序列化为
JsonObject
。