2017-03-23 8 views
0

나는 카스 산드라 테이블에 여러 비 기본 컬럼을 가지고있다. 일부는 사용자 정의 유형의 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 드라이버를 통해서도 이것을 할 수 있다면 어떨까요? 우리는 ** "Select *"쿼리를 실행해야하고 해당 쿼리에서 Json() 메서드를 추가 할 수 없기 때문에 묻습니다. – user2250246

+2

사용자로부터 select json *을 사용할 수 있습니다. –

+0

멋지다! 정말 고맙습니다! – user2250246