3

何かについて混乱するかもしれませんが、Java Riakクライアントからカスタムオブジェクトを保存し、Python Riakクライアントを使用してそのオブジェクトを読み取ろうとすると、dictではなく生の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)

上記のPythonの結果は次のとおりです。

<type 'str'>

<type 'dict'>ここでの例がどのように機能するかと同じように、 私はそれがそうであることを期待しています:http: //basho.github.com/riak-python-client/tutorial.html#getting-single-values-out

オブジェクトがJavaから保存されるときに、オブジェクトとしてではなくJSON文字列として保存される理由に戸惑います。

この不一致を引き起こしている可能性のある私のアプローチの問題を誰かが指摘していただければ幸いです。

ありがとう!

4

1 に答える 1

3

PythonクライアントでHTTPプロトコル/トランスポートのバグを見つけたようです。

使用しているバージョンとマスターの現在のバージョンの両方がJSONを正しくデコードしていません。私自身と別の開発者が今朝調べましたがcharset、クリスチャンがコメントで述べたように、コンテンツタイプを使用してRiakからパラメータが返されるという問題が原因のようです("application/json; charset=UTF-8"

github(https://github.com/basho/riak-python-client/issues/227)で問題をオープンし、これを修正します。

それまでの間、私が持っている唯一の提案は、返されたJSON文字列を自分でデコードするか、1.5.2クライアント(pypyから最新の安定版)とProtocolBuffersトランスポートを使用することです。

client = riak.RiakClient(port=8087, transport_class=riak.RiakPbcTransport)

デコードされたJSONをdict期待どおりに返します。

于 2013-03-19T15:08:42.733 に答える