您好我正在使用Voldemort来存储我的数据。我的关键是一个单词,值是单词和URL的出现次数。例如:
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.NotSerializableException: org.json.JSONObject at voldemort.serialization.ObjectSerializer.toBytes(ObjectSerializer.java:47) 在 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.main(ClientExample.java:27) 引起: java.io.NotSerializableException: org.json.JSONObject at java.io.ObjectOutputStream.writeObject0(未知 来源)at java.io.ObjectOutputStream.writeObject(未知 来源)at voldemort.serialization.ObjectSerializer.toBytes(ObjectSerializer.java:44)
**
您能否告诉我如何序列化JSON对象。提前谢谢。
答案 0 :(得分:6)
查看Gson库。它对对象映射和序列化做了很好的JSON。
答案 1 :(得分:5)
迟到的答案,但我自己正在寻找这个,我找到了解决方案。为了澄清,我的问题是我的类包含一个org.json.JSONobject,它无法序列化,这是在Android Bundle对象中传递对象的必要步骤。
像这样:
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构造函数,并将其分配给瞬态字段。
我发现这比替换库要容易得多。
答案 2 :(得分:3)
使用JSONObject的.toString()方法获取文本。
答案 3 :(得分:0)
如果您仍然希望Java内置序列化而不必将JSON对象编组为字符串表示法,那么您可以做的一件事是从org.json扩展JSONObject和JSONArray并实现Serializable。
然后你可以全面使用你自己的JSONObject和JSONArray版本而不是原版。
确保在子类上定义所有构造函数并调用它们的super()对应项,并实现从属性返回父类型(如getJSONObject()和getJSONArray())的特定方法。