我目前使用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