2013-03-22 2 views
6

में जेसन ऑब्जेक्ट को पार्स करना मेरे पास एक वेब-एप्लिकेशन के बारे में एक प्रश्न है जिसका निर्माण मैं कर रहा हूं जहां मेरे पास एक जेएसएन स्ट्रिंग प्राप्त करने वाली एक आरईएसटी सेवा है।एक स्ट्रिंग

{ 
    "string" : "value", 
    "string" : "value", 
    "object" : { 
       "string" : "value", 
       "string" : "value", 
       .... 
       } 
} 

मैं resteasy उपयोग कर रहा हूँ json स्ट्रिंग जो जैक्सन के नीचे का उपयोग करता है पार्स करने के लिए:

JSON स्ट्रिंग की तरह कुछ है। मेरे पास एक जैक्सबी एनोटेटेड क्लास है और मैं पूरी तरह से स्ट्रिंग वैरिएबल में "ऑब्जेक्ट" को पार्स करना चाहता हूं। कारण यह है कि मैं इसे सही पार्सर का उपयोग करके जेसन को पार्स करने में सक्षम होना चाहता हूं (यह उस एप्लिकेशन पर निर्भर करता है जो अनुरोध भेजता है ताकि अग्रिम में जानना असंभव हो)।

मेरे JAXB एनोटेट वर्ग इस तरह दिखता है:

@XmlRootElement 
@XmlAccessorType(XmlAccessType.PROPERTY) 
public class Test{ 

@XmlElement(type = String.class) 
private String object; 

//getter and setter 
... 
} 

जब मैं बाकी कॉल निष्पादित और जैक्सन इस कोड को पार्स करते हैं मैं एक

Can not deserialize instance of java.lang.String out of START_OBJECT token 

त्रुटि मिलती है। तो असल में मैं एक जेसन स्ट्रिंग के टुकड़े को पार्स करने की कोशिश कर रहा हूं, जो एक स्ट्रिंग में एक जेसन ऑब्जेक्ट है। मुझे किसी ऐसी समस्या के साथ किसी को ढूंढना प्रतीत नहीं होता है।

किसी भी प्रतिक्रिया के लिए अग्रिम धन्यवाद।

+4

यह एक स्ट्रिंग होना चाहिए? चूंकि आप जैक्सन का उपयोग कर रहे हैं, इसलिए मैं आपकी ऑब्जेक्ट को [जेसन नोड] (http://fasterxml.github.com/jackson-databind/javadoc/2.1.0/com/fasterxml/jackson/databind/JsonNode.html) के रूप में स्टोर करने की अनुशंसा करता हूं। यह बस ठीक से deserialized किया जाना चाहिए और आप सही पार्सर के साथ बाद में इसे पार्स करने में सक्षम हैं। – nutlike

+0

मेरे विश्लेषक के मुताबिक यह होना चाहिए :)। मैं वैसे भी कोशिश करूंगा, अगर यह काम करता है, तो मैं उसे मनाने दूंगा। – KwintenP

उत्तर

0
java.lang.String out of START_OBJECT token 

इसका मतलब है कि चरित्र की उम्मीद के बाद "object" उद्धरण ", लेकिन नहीं कोष्ठक { है।

अपेक्षित json

"object" : "my object" 

वास्तविक json

"object" : { ... 

=======
आप अपने उदाहरण की तरह json पार्स चाहते हैं, तो बदलने अपने कक्षा। जैसे

@XmlRootElement 
@XmlAccessorType(XmlAccessType.PROPERTY) 
public class Test{ 

    @XmlElement 
    private InnerTest object; 

    //getter and setter 
... 
} 

@XmlAccessorType(XmlAccessType.PROPERTY) 
public class InnerTest{ 

    @XmlElement 
    private String string; 

    //getter and setter 
... 
} 
1

तो मैं इस सवाल तुम सिर्फ एक mechnanism चाहते हैं, कि एक JSON-स्ट्रिंग और दूसरा रास्ता में एक जावा-वस्तु धर्मान्तरित को समझते हैं।

मुझे इसकी भी आवश्यकता है, जबकि मैं वेबस्केट क्लाइंट-सर्वर संचार का उपयोग कर रहा था जहां एक JSON स्ट्रिंग पास हो गई है।

इसके लिए मैंने जीएसओएन (GSON देखें) का उपयोग किया। वहां आपको एक पूर्ण JSON-String बनाने की संभावना मिली है। यहाँ कुछ उदाहरण:

// Converts a object into a JSON-String 
public String convertMyClassObjectToJsonFormat() { 
    MyClass myObject = new MyClass(); 
    Gson gson = new Gson(); 

    return gson.toJson(myObject); 
} 

//Converts a JSON-String into a Java-Class-Object 
public MyClass convertJsonToMyClassObject(
      CharBuffer jsonMessage) { 
    Gson gson = new Gson(); 

    return gson.fromJson(jsonMessage.toString(), 
       MyClass.class); 
} 

क्या आप की जरूरत है, कि आप अपने वर्ग गुण-सेटर और JSON-गुण-नामों के बराबर हैं। जैसे

{ 
    "info":[ 
     { 
     "name": "Adam", 
     "address": "Park Street" 
     } 
    ] 
} 

आपकी कक्षा के इस तरह दिखना चाहिए:

public class Info{ 
private String name; 
private String address; 

public void setName(String name){ 
    this.name = name; 
} 
public void setAddress(String address){ 
    this.address = address; 
} 
} 
0

आप भी कुछ इस तरह कर सकते हैं;

public class LeaderboardView 
{ 
    @NotEmpty 
    @JsonProperty 
    private String appId; 

    @NotEmpty 
    @JsonProperty 
    private String userId; 

    @JsonProperty 
    private String name = ""; 

    @JsonProperty 
    private String imagePath = ""; 

    @NotEmpty 
    @JsonIgnore 
    private String rank = ""; 

    @NotEmpty 
    @JsonProperty 
    private String score; 

    public LeaderboardView() 
    { 
     // Jackson deserialization 
    } 

}

1

@KwintenP json smart library का उपयोग करें।

आप तो बस का उपयोग कर JSON ऑब्जेक्ट पहले प्राप्त कर सकते हैं:

JSONObject test = (JSONObject) JSONValue.parse(yourJSONObject); 
String TestString = test.toString(); 

इतना ही नहीं, आप एक JSON ऑब्जेक्ट के अंदर एक विशेष वस्तु को पुनः प्राप्त यह किसी अन्य वस्तु, एक सरणी हो सकता है और यह एक स्ट्रिंग के लिए परिवर्तित कर सकते हैं कर सकते हैं या जिस तरह से आप चाहते हैं उसका उपयोग करें।