如何在java中序列化JSON对象

XXX*_*XXX 6 json

嗨,我正在使用Voldemort来存储我的数据.我的关键是一个单词,值是单词和URL的出现次数.例如:

key :question
value: 10, www.stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

我正在使用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); 
  } 
} 
Run Code Online (Sandbox Code Playgroud)

我的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> 
Run Code Online (Sandbox Code Playgroud)

当我试图运行代码时,我得到以下异常:**

线程"main"中的异常 voldemort.serialization.SerializationException:java.io.NotSerializableException: 位于voldemort.store上的voldemort.serialization.ObjectSerializer.toBytes(ObjectSerializer.java:47)中的org.json.JSONObject,voldemort.store.selegatingStore.put(DelegatingStore.java: 68)在voldemort.client.DefaultStoreClient.put(DefaultStoreClient.java:208)at voldemort.client.DefaultStoreClient.put(DefaultStoreClient.java:193)at ClientExample.main(ClientExample.java:27)引起:java.io. NotSerializableException:org.json.JSONObject at java.io.ObjectOutputStream.writeObject0(Unknown Source)at java.io.ObjectOutputStream.writeObject(Unknown Source)at voldemort.serialization.ObjectSerializer.toBytes(ObjectSerializer.java:44)

**

你能否告诉我如何序列化JSON对象.提前谢谢.

Fak*_*een 6

看看Gson图书馆.它对对象映射和序列化做了很好的JSON.


Car*_*los 5

迟到的答案,但我自己正在寻找这个,我找到了解决方案.只是为了澄清,我的问题是我的类包含一个org.json.JSONobject,它无法序列化,这是在Android Bundle对象中传递对象的必要步骤.

  1. 将关键字transient添加到字段中.
  2. 为序列化程序提供函数writeObject和readObject以进行调用.这看起来像一个覆盖函数,但实际上并没有用@Override修饰.

像这样:

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());
}
Run Code Online (Sandbox Code Playgroud)

3.在loadJSON函数中,调用接受字符串的JSONObject构造函数,并将其分配给瞬态字段.

我发现这比替换库要容易得多.


JOT*_*OTN 3

使用 JSONObject 的 .toString() 方法获取文本。