我目前正在使用XStream对JSON进行反序列化,并且它一直运行良好。但是,当我有JSON字符串时,如下所示
{
key1: { an_object: { something: 'foobar' } },
key2: { another_object: { data: 'hi' }
}
最值得注意的是它没有根节点,我不知道如何解析它。基本上,我希望DROP_ROOT_NODE与反序列化相反。
答案 0 :(得分:4)
简短的回答是“你不能”。
XStream需要知道要实例化的类,它从JSON(或XML)数据中获取知识。类名可以是别名,但不能省略。你可以通过以下方式解决:
答案 1 :(得分:3)
我知道这是一个老问题,但我会在整个上午谷歌搜索后发布我的解决方案。答案是提供虚拟根节点(开始和终止标记)。为了实现这一目标,你最好的朋友之一是SequenceInputStream:
我的代码如下:
reader = new XppDriver().createReader(new SequenceInputStream(
Collections.enumeration(Arrays.asList(
new InputStream[] {
new ByteArrayInputStream("<PlatformAuditEvents>".getBytes()),
new FileInputStream(file),
new ByteArrayInputStream("</PlatformAuditEvents>".getBytes())
}))
));
in = xstream.createObjectInputStream(reader);
这里我混合了三个InputStream对象,它们是第一个和第三个,它们提供了处理文件中缺少的必需标记。
此解决方案的灵感来自此SO Question。希望这有助于某人。
答案 2 :(得分:2)
使用以下代码:
XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
} });