2012-06-05 12 views
9

का उपयोग कर एक जेसन सरणी को deserialize Gson का उपयोग कर एक जेसन सरणी को deserialize करने के बारे में stackoverflow पर बहुत सारी जानकारी है।xstream

लेकिन मैं जेटीसन के साथ XStream का उपयोग करके ऐसा कैसे कर सकता हूं?

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

मैं अपवाद निम्नलिखित है:

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

यहाँ XStream कोड मैं इसे कैसे पार्स करने के लिए कोशिश है:

यहाँ json है

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

मैं Xstream तरह बहुत ज्यादा। आप देख सकते हैं कि मुझे XStream उत्तर टैग पर 6 वें उपयोगकर्ता के रूप में रैंक किया गया है। मैंने एक्सस्ट्रीम का उपयोग करके अपनी समस्या को हल करने की कोशिश की, जिस तरह से मैं सोच सकता था और मैं असफल रहा हूं। जेएसओएन के साथ काम करने के लिए अन्य पुस्तकालयों की एक और धागा सूचीबद्ध है: http://stackoverflow.com/questions/5245840/how-to-convert-string-to-jsonobject-in-java। मुझे क्षमा करें! – pablosaraiva

+0

क्या आप इसे काम करने में सक्षम थे? क्या आपने कोशिश की: 'xstream.alias (" इकाई ", Entity.class);' 'xstream.addImplicitCollection (Entity.class, "इकाई");' और सरणी के बजाय 'सूची' का उपयोग करके? –

उत्तर

0
सरणी मैं इसे चलाने के लिए नहीं मिल सकता है, लेकिन एक सूची के साथ साथ

:

जावा:

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; 
    } 
} 

एक्सएमएल:

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

रूप से देखा जा सकता this answer related to root elementएक्सस्ट्रीम वहां विफल रहता है जेएसओएन में मूल तत्व नहीं है।

एक बार जब आप नक्शा इकाई कुछ जावा वर्ग Xstream कोआईडी और नाम (के रूप में JSON में वे तत्व में संलग्न नहीं कर रहे हैं) के जोड़े के लिए मूल तत्व नहीं मिल रहा।

केवल हाथ से बना रैपर, इनपुट धाराओं में हेरफेर करने या कस्टम कनवर्टर का उपयोग करने से यहां मदद मिल सकती है।

संबंधित मुद्दे