2010-11-24 12 views
6

हाय मैं अपना डेटा स्टोर करने के लिए वोल्डमॉर्ट का उपयोग कर रहा हूं। मेरी कुंजी एक शब्द और मान शब्द और यूआरएल की घटना की संख्या है। उदाहरण के लिए:जावा में JSON ऑब्जेक्ट को क्रमबद्ध करने के लिए कैसे करें

key :question 
value: 10, www.stackoverflow.com 

मैं अपने मूल्यों को रखने के लिए जेसन ऑब्जेक्ट का उपयोग कर रहा हूं। मेरे कोड इस

import org.json.JSONObject; 
import com.metaparadigm.jsonrpc.JSONSerializer; 
import voldemort.client.ClientConfig; 
import voldemort.client.SocketStoreClientFactory; 
import voldemort.client.StoreClient; 
import voldemort.client.StoreClientFactory; 

public class ClientExample { 
    public static void main (String [] args) { 
    String bootstrapUrl = "tcp://localhost:6666"; 

    ClientConfig cc = new ClientConfig(); 
    cc.setBootstrapUrls (bootstrapUrl); 
    String[] valuePair = new String[2]; 
    int val = 1; 
    StoreClientFactory factory = new SocketStoreClientFactory (cc); 
    StoreClient client = factory.getStoreClient("test"); 
    JSONObject json = new JSONObject(); 
    json.put("occurence",val); 
    json.put("url", "www.cnn.com"); 
    client.put("foo", json); 
    } 
} 

तरह लग रहा है और मेरे store.xml इस

<stores> 
    <store> 
    <name>test</name> 
    <persistence>bdb</persistence> 
    <routing>client</routing> 
    <replication-factor>1</replication-factor> 
    <required-reads>1</required-reads> 
    <required-writes>1</required-writes> 
    <key-serializer> 
     <type>string</type> 
    </key-serializer> 
    <value-serializer> 
     <type>java-serialization</type> 
    <schema-info>"Compount Types"</schema-info> 
    </value-serializer> 
    </store> 
</stores> 

तरह लग रहा है जबकि मैं मैं निम्न अपवाद हो रही है कोड को चलाने के लिए कोशिश कर रहा था: **

धागे "मुख्य" voldemort.serialization.SerializationException: java.io.NotSerializableExc में अपवाद eption: voldemort.serialization.ObjectSerializer.toBytes (ObjectSerializer.java:47) पर org.json.JSONObject voldemort.store.serialized.SerializingStore.put (SerializingStore.java:109) पर voldemort.store पर .DelegatingStore.put (DelegatingStore.java:68) voldemort.client.DefaultStoreClient.put (DefaultStoreClient.java:208) पर voldemort.client.DefaultStoreClient.put (DefaultStoreClient.java:193) पर ClientExample पर । मुख्य (ClientExample.java:27) कारण: java.io.NotSerializableException: org.json.JS voldemort.serialization.ObjectSerializer.toBytes (ObjectSerializer.java:44)

पर java.io.ObjectOutputStream.writeObject0 (अज्ञात स्रोत) java.io.ObjectOutputStream.writeObject (अज्ञात स्रोत) पर पर ONObject

**

क्या आप कृपया मुझे बताएं कि जेएसओएन ऑब्जेक्ट को क्रमबद्ध कैसे करें। अग्रिम धन्यवाद।

उत्तर

3

टेक्स्ट प्राप्त करने के लिए JSONObject की .toString() विधि का उपयोग करें।

6

Gson लाइब्रेरी पर एक नज़र डालें। मैपिंग और क्रमबद्धता ऑब्जेक्ट करने के लिए यह अच्छा JSON करता है।

0

मामले तुम अब भी जावा में निर्मित क्रमबद्धता स्ट्रिंग अंकन में अपने JSON ऑब्जेक्ट मार्शल करने के लिए सहारा के बिना चाहते हैं में, एक बात तुम कर सकते हो org.json से JSONObject और JSONArray का विस्तार करने और सिर्फ Serializable लागू है।

फिर आप मूल के बजाय बोर्ड में JSONObject और JSONArray के अपने संस्करणों का उपयोग कर सकते हैं।

सुनिश्चित करें कि आप अपने सबक्लास पर सभी रचनाकारों को परिभाषित करते हैं और अपने सुपर() समकक्षों को कॉल करते हैं और साथ ही उन विशिष्ट विधियों को लागू करते हैं जो माता-पिता प्रकार जैसे getJSONObject() और getJSONArray() को गुणों से वापस करते हैं।

5

देर से जवाब, लेकिन मैं इसे स्वयं खोज रहा था और मुझे एक समाधान मिला है। बस स्पष्ट करने के लिए, मेरी समस्या यह थी कि मेरी कक्षा में org.json.JSONobject था, और इसे क्रमबद्ध नहीं किया जा सका, जो एंड्रॉइड बंडल ऑब्जेक्ट्स में ऑब्जेक्ट पास करने के लिए एक आवश्यक कदम है।

  1. कीवर्ड में क्षणिक जोड़ें।
  2. कॉल करने के लिए serializer के लिए कार्यों को लिखें ऑब्जेक्ट और readObject प्रदान करें। यह ओवरराइड फ़ंक्शन की तरह दिखता है, लेकिन वास्तव में @ ओवरराइड से सजाया नहीं जाता है।

इस तरह:

private void writeObject(ObjectOutputStream oos) throws IOException{ 
    oos.defaultWriteObject(); 
    oos.writeChars(_jsonObject.toString()); 
} 

private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { 
    ois.defaultReadObject(); 
    loadJSON(ois.readUTF()); 
} 

3. loadJSON समारोह में, आप JSONObject निर्माता है कि एक स्ट्रिंग लेता है कहते हैं, और क्षणिक क्षेत्र के लिए असाइन करें।

मुझे लाइब्रेरी को बदलने से कहीं अधिक आसान लगता है।

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

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