2010-11-24 5 views
6

こんにちは私はデータを格納するためにVoldemortを使用しています。私のキーは単語であり、値は単語とURLの出現回数です。例:JavaでJSONオブジェクトをシリアライズする方法

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

私は値を入れるためにJsonオブジェクトを使用しています。 私のコードは、この

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> 

次のようになります。**

スレッド "main"の例外 voldemort.serialization.SerializationException: java.io.NotSerializableExc eption: voldemort.storeでvoldemort.serialization.ObjectSerializer.toBytes(ObjectSerializer.java:47) でvoldemort.store.serialized.SerializingStore.put(SerializingStore.java:109) で org.json.JSONObject .DelegatingStore.put voldemort.client.DefaultStoreClient.put(DefaultStoreClient.java:193)で voldemort.client.DefaultStoreClient.put(DefaultStoreClient.java:208)で(DelegatingStore.java:68) ClientExampleで 。 main(ClientExample.java:27) 原因: java.io.NotSerializableException: org.json.JS voldemort.serialization.ObjectSerializer.toBytes(ObjectSerializer.java:44)

で java.io.ObjectOutputStream.writeObject(不明 出典)で java.io.ObjectOutputStream.writeObject0(不明 出典)でONObject

**

JSONオブジェクトをシリアライズする方法を教えてください。事前に感謝します。

答えて

3

JSONObjectの.toString()メソッドを使用してテキストを取得します。

6

Gsonライブラリをご覧ください。これは、オブジェクトマッピングとシリアライゼーションのための素晴らしいJSONを行います。

0

JSONオブジェクトを文字列表記にマーシャリングする必要がなく、Java組み込みシリアル化が必要な場合は、JSONObjectとJSONArrayをorg.jsonから拡張してSerializableを実装するだけです。

オリジナルの代わりに、自分のバージョンのJSONObjectとJSONArrayをボード全体で使用できます。

サブクラスにすべてのコンストラクタを定義し、super()の対応部分を呼び出し、プロパティからgetJSONObject()やgetJSONArray()などの親の型を返す特定のメソッドを実装するようにしてください。

5

遅くとも、私はこれを自分で探していましたが、解決策を見つけました。私の問題は、クラスにorg.json.JSONオブジェクトが含まれていて、シリアル化できなかったことです。これは、Androidバンドルオブジェクトでオブジェクトを渡すために必要なステップです。

  1. キーワードトランジエントをフィールドに追加します。
  2. シリアライザが呼び出す関数writeObjectとreadObjectを提供します。これはオーバーライド関数のように見えますが、実際には@Overrideで装飾されていません。このよう

:loadJSON機能で

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、あなたは文字列を取りJSONObjectコンストラクタを呼び出し、過渡フィールドに割り当てます。

これは、ライブラリを置き換えるよりもはるかに簡単だとわかりました。

関連する問題