我目前使用XStream反序列化JSON,并且它工作得很好。然而,当我有JSON字符串类似如下XStream解析没有根节点的JSON
{
key1: { an_object: { something: 'foobar' } },
key2: { another_object: { data: 'hi' }
}
最值得注意的是它没有根节点,我不知道如何解析它。基本上,我想要反序列化DROP_ROOT_NODE的反义词。
我目前使用XStream反序列化JSON,并且它工作得很好。然而,当我有JSON字符串类似如下XStream解析没有根节点的JSON
{
key1: { an_object: { something: 'foobar' } },
key2: { another_object: { data: 'hi' }
}
最值得注意的是它没有根节点,我不知道如何解析它。基本上,我想要反序列化DROP_ROOT_NODE的反义词。
简短的回答是“你不能”。
XStream需要知道要实例化的类,它从JSON(或XML)数据中获取知识。类名可以是别名,但不能省略。您可以通过解决:
你能提供一个如何做选项2的例子吗? – portfoliobuilder 2016-06-30 23:04:48
使用下面的代码:
XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
} });
如何读取没有根节点的JSON;有没有你可以提供的示例代码? – raffian 2013-01-22 16:32:45
我知道这是一个老问题,但我会后一整个上午的谷歌搜索后,我的解决方案。答案是提供虚拟根节点(开始和终止标签)。为了做到这一点,你最好的朋友之一的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。希望这可以帮助某人。
它看起来像一个谈话一直在进行,这是有道理的。它基于XML解析器,并且XML必须包含根节点。看起来答案是“它不能”。 http://www.nabble.com/Serializing-JSON-with-no-root--td21732630.html – 2009-08-11 22:52:16