2017-03-23 10 views
0

私は、私のcassandraテーブルにいくつかの非プリミティブな列を持っています。 一部はUDTのユーザー定義型です。datastaxドライバを使用して、プリミティブ以外の列をJSON文字列として読み取るにはどうすればよいですか?

datastaxドライバを使用してクエリを実行しているときに、そのようなUDTをJSON値に変換する必要があります。 は具体的には、私は以下の値オブジェクトのJSON文字列を取得したい:

 Row row = itr.next(); 
     ColumnDefinitions cds = row.getColumnDefinitions(); 
     cds.asList().forEach((ColumnDefinitions.Definition cd) -> { 
      String name = cd.getName(); 
      Object value = row.getObject(name); 
     } 

私はhttp://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/

を経ていしかし、私は私が持っているすべてのUDTのためのコーデックを追加する必要はありません。

row.getString(name) 

をしかし、それは私にエラーを与える:Using Datastax Java Driver to query a row as a JSONを見て

は、私もこれを試してみましたCodec not found for requested operation: [set<date> <-> java.lang.String]

ドライバは何とかコーデックおよびすべてと、明示的な口出しせずに私に直接JSONを返すことはできますか?

答えて

1

使用toJson方法

Starting with version 2.2 of Apache Cassandra™, toJson method return json representation of an object.

例:

今、あなたはJSONとしてdirect_reportsと名前を選択することができます
CREATE TYPE fullname (
    firstname text, 
    lastname text 
); 

CREATE TABLE users (
    id uuid PRIMARY KEY, 
    direct_reports set<frozen<fullname>>, 
    name frozen<fullname> 
); 

SELECT id,toJson(direct_reports) as direct_reports,toJson(name) as name FROM users ; 
ここ

私はdirect_reportsおよび0123としてtoJson(direct_reports)名前を変更していをnameとすると、row.getString("direct_reports")row.getString("name")を使用して、direct_reports jsonとjsonという名前を取得できます。

出力:

id     | 62c36092-82a1-3a00-93d1-46196ee77204 
direct_reports  | [{"firstname": "Naoko", "lastname": "Murai"}, {"firstname": "Sompom", "lastname": "Peh"}] 
name    | {"firstname": "Marie-Claude", "lastname": "Josset"} 
+1

おかげAshraful、これは便利です。私たちがdatastaxドライバを使ってこれを行うことができるかどうか? **私は**選択*クエリを実行する必要があり、そのクエリではtoJson()メソッドを追加することができないので尋ねます。 – user2250246

+2

ユーザからselect json *を使用できます。 –

+0

素晴らしい!どうもありがとうございます! – user2250246

関連する問題