2012-06-05 37 views
9

Có rất nhiều thông tin về stackoverflow về cách deserialize một mảng json bằng Gson.deserialize một mảng json bằng cách sử dụng xstream

Nhưng làm cách nào tôi có thể thực hiện tương tự bằng cách sử dụng XStream với sự xóa bỏ?

Đây là json:

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

Đây là XStream đang làm thế nào tôi cố gắng phân tích nó:

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

Tôi đã theo ngoại lệ:

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

Tôi thích XStream rất nhiều. Bạn có thể thấy tôi được xếp hạng là người dùng thứ 6 tại thẻ trả lời XStream. Tôi đã cố gắng giải quyết vấn đề của bạn bằng cách sử dụng XStream tất cả các cách tôi có thể nghĩ đến và tôi đã thất bại. Có một luồng khác liệt kê các thư viện khác để làm việc với JSON tại đây: http://stackoverflow.com/questions/5245840/how-to-convert-string-to-jsonobject-in-java. Tôi xin lỗi! – pablosaraiva

+0

Bạn có thể làm việc này không? Bạn đã thử: 'xstream.alias (" entity ", Entity.class);' với 'xstream.addImplicitCollection (Entity.class," entity ");' và sử dụng 'List' thay vì một mảng? –

Trả lời

0

Với mảng Tôi không thể làm cho nó chạy, nhưng với một danh sách:

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

Như có thể thấy từ this answer related to root elementXStream không thành công khi có không phải là phần tử gốc trong JSON.

Khi bạn ánh xạ thực thể đến một số lớp Java xStream không thể tìm thấy phần tử gốc cho cặp idtên (như trong JSON họ không được đính kèm trong phần tử).

Chỉ trình bao bọc bằng tay, thao tác với luồng đầu vào hoặc sử dụng trình chuyển đổi tùy chỉnh mới có thể trợ giúp tại đây.

Các vấn đề liên quan