我可能会对某些东西感到困惑,但是当我从Java Riak客户端存储自定义对象,然后尝试使用Python Riak客户端读取该对象时,最终得到的是原始json字符串而不是字典。当由riak-python-client读取时,由riak-java-client存储的对象最终成为原始json?
但是,如果我将对象存储在python中,我可以在获取该对象时输出一个python字典。
我可能只需在python端使用一个json库来解决这个问题,但是我正在经历这种差异的事实让我觉得我做错了什么。
在Java方面,这是我的目标:
class DocObject
{
public String status; // FEEDING | PERSISTED | FAILED | DELETING
public List<String> messages = new ArrayList<String>();
}
class PdfObject extends DocObject
{
public String url;
public String base_url;
}
这是怎么了存储了Riak该对象:
public void feeding(IDocument doc) throws RiakRetryFailedException {
PdfObject pdfObject = new PdfObject();
pdfObject.url = doc.getElement("url").getValue().toString();
pdfObject.base_url = doc.getElement("base_url").getValue().toString();
pdfObject.status = "FEEDING";
String key = hash(pdfObject.url);
pdfBucket.store(key, pdfObject).execute();
}
这是我在Python正在做的获取数据:
# Connect to Riak.
client = riak.RiakClient()
# Choose the bucket to store data in.
bucket = client.bucket('pdfBucket')
doc = bucket.get('7909aa2f84c9e0fded7d1c7bb2526f54')
doc_data = doc.get_data()
print type(doc_data)
上述蟒的结果是:
<type 'str'>
我期待这是<type 'dict'>
,就像这里的例子是如何工作的: http://basho.github.com/riak-python-client/tutorial.html#getting-single-values-out
我困惑,为什么当对象从Java存储它被存储为一个JSON字符串,而不是作为一个对象。
如果有人能指出我的方法可能导致这种差异,我将不胜感激。
谢谢!
如果您检索并比较通过Python和Java客户端创建的两个对象,那么元数据是否存在差异内容类型? – 2013-03-19 11:44:59
正如在下面的答案中指出的那样,是的,Content-type与Python客户端生成“application/json”,而Java客户端生成“application/json; charset = UTF-8”之间存在差异。根据回答和github上报告的问题,这就是问题所在。点建议。 – chaimp 2013-03-19 17:36:17