2012-06-05 168 views
9

關於如何使用Gson反序列化一個json數組,有很多關於stackoverflow的信息。使用xstream反序列化一個json數組

但是我怎樣才能使用XStream做拋棄?

這裏是JSON:

{"entity":[{"id":"1", "name":"aaa"}, {"id":"2", "name":"bbb"}]} 

這是XStream代碼我如何嘗試解析它:

XStream xstream = new XStream(new JettisonMappedXmlDriver()); 
xstream.alias("entity", Entity[].class); 
return (Entity[])xstream.fromXML(jsonString); 

我有例外如下:

com.thoughtworks.xstream.converters.ConversionException: id : id 
+1

我喜歡XStream的非常多。您可以看到我在XStream answer標籤中排名爲第6位用戶。我試圖用XStream解決所有我能想到的問題,並且我失敗了。還有另一個線程列出了其他庫在這裏使用JSON:http://stackoverflow.com/questions/5245840/how-to-convert-string-to-jsonobject-in-java。對不起! – pablosaraiva

+0

您是否能夠正常工作?您嘗試過: 'xstream.alias(「entity」,Entity.class);'與 'xstream.addImplicitCollection(Entity.class,「entity」);'並使用'List'而不是數組? –

回答

0

隨着陣列我不能讓它運行,但有一個列表:

的Java:

package de.mosst.spielwiese; 

import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.List; 

import org.junit.Test; 

import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.annotations.XStreamAlias; 
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; 

import lombok.Data; 

public class XStreamDeserializeJsonWithJettison { 

    @Test 
    @SuppressWarnings("unchecked") 
    public void smokeTest() { 
     InputStream file = XStreamDeserializeJsonWithJettison.class.getResourceAsStream("XStreamDeserializeJsonWithJettison.json"); 
     XStream xStream = new XStream(new JettisonMappedXmlDriver()); 
     xStream.processAnnotations(Entity.class); 

     List<Entity> entities = (List<Entity>) xStream.fromXML(file); 
     System.out.println(entities); 
    } 

    @Data 
    @lombok.AllArgsConstructor 
    @XStreamAlias("entity") 
    class Entity { 
     String id; 
     String name; 
    } 
} 

XML:

{ 
    "list": [ 
     { 
      "entity": [ 
       { 
        "id": 1, 
        "name": "odin" 
       }, 
       { 
        "id": 2, 
        "name": "dwa" 
       } 
      ] 
     } 
    ] 
} 
0

正如從可見this answer related to root elementXStream失敗時在JSON中不是根元素。

一旦你映射實體某些Java類的XStream找不到根元素對ID(如JSON它們沒有包含在元素)。

只有手工包裝,操作輸入流或使用自定義轉換器可以在這裏幫助。