如何在java中序列化JSON对象
嗨,我在用伏地魔储存我的数据。我的关键字是一个单词,值是单词的出现次数和URL。例如:如何在java中序列化JSON对象,java,json,serialization,Java,Json,Serialization,嗨,我在用伏地魔储存我的数据。我的关键字是一个单词,值是单词的出现次数和URL。例如: key :question value: 10, www.stackoverflow.com 我使用Json对象来放置我的值。 我的代码如下所示 import org.json.JSONObject; 导入com.metaparadigm.jsonrpc.JSONSerializer; 导入voldemort.client.ClientConfig; 导入voldemort.client.SocketSto
key :question
value: 10, www.stackoverflow.com
我使用Json对象来放置我的值。
我的代码如下所示
import org.json.JSONObject;
导入com.metaparadigm.jsonrpc.JSONSerializer;
导入voldemort.client.ClientConfig;
导入voldemort.client.SocketStoreClientFactory;
导入voldemort.client.StoreClient;
导入voldemort.client.StoreClientFactory;
公共类客户端示例{
公共静态void main(字符串[]args){
字符串bootstrapUrl=”tcp://localhost:6666";
ClientConfig cc=newclientconfig();
cc.setBootstrapUrls(bootstrapUrl);
String[]valuePair=新字符串[2];
int-val=1;
StoreClientFactory=新SocketStoreClientFactory(cc);
StoreClient=factory.getStoreClient(“测试”);
JSONObject json=新的JSONObject();
json.put(“发生”,val);
json.put(“url”,“www.cnn.com”);
client.put(“foo”,json);
}
}
我的store.xml如下所示
试验
bdb
客户
1.
1.
1.
一串
java序列化
“复合类型”
当我试图运行代码时,出现以下异常:
**
线程“main”中出现异常
voldemort.serialization.SerializationException:
java.io.NotSerializableException:
org.json.JSONObject位于
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)
在
main(ClientExample.java:27)
原因:
java.io.NotSerializableException:
org.json.JSONObject位于
java.io.ObjectOutputStream.WriteObject 0(未知
来源)在
java.io.ObjectOutputStream.writeObject(未知
来源)在
voldemort.serialization.ObjectSerializer.toBytes(ObjectSerializer.java:44)
**
您能告诉我如何序列化JSON对象吗?提前谢谢。使用JSONObject的.toString()方法获取文本。看看库。它可以很好地实现JSON到对象的映射和序列化。如果您仍然希望Java内置序列化,而不必将JSON对象封送到字符串表示法中,那么您可以做的一件事是从org.JSON扩展JSONObject和JSONArray,并实现Serializable 然后,您可以全面使用自己的JSONObject和JSONArray版本,而不是原始版本
确保在子类上定义所有构造函数,调用它们的super()对应项,并实现从属性返回父类型的特定方法,如getJSONObject()和getJSONArray()。稍后回答,但我自己也在搜索,我已经找到了解决方案。只是想澄清一下,我的问题是我的类包含一个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());
}
三,。在loadJSON函数中,调用接受字符串的JSONObject构造函数,并将其分配给transient字段
我发现这比替换库容易得多。这很好,但是为什么要使用
writeChars()
而不是writeUTF()
?这是个错误吗?另外,如果JSONObject有可能根本没有初始化,那么您可能需要检查它是否为null。您可能是对的。但是我已经很久没有这样做了。