Skip to content

Instantly share code, notes, and snippets.

@alexott
Created February 3, 2018 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexott/68739e66551ea386e65b17cb91a41a32 to your computer and use it in GitHub Desktop.
Save alexott/68739e66551ea386e65b17cb91a41a32 to your computer and use it in GitHub Desktop.
JSON serialization of Java's ResultSet returned by DataStax Java Driver
>mvn exec:java -Dexec.mainClass="com.datastax.alexott.demos.jdtest1.Test1"
[{"id": "e7ae5cf3-d358-4d99-b900-85902fda9bb1", "b": true, "i": 1, "t": "test 1"},{"id": "e7ae5cf3-d358-4d99-b900-85902fda9bb3", "b": false, "i": 3, "t": null},{"id": "e7ae5cf3-d358-4d99-b900-85902fda9bb2", "b": false, "i": 10, "t": "test 5"}]
[{"id":"e7ae5cf3-d358-4d99-b900-85902fda9bb1","b":true,"i":1,"t":"test 1"},{"id":"e7ae5cf3-d358-4d99-b900-85902fda9bb3","b":false,"i":3,"t":null},{"id":"e7ae5cf3-d358-4d99-b900-85902fda9bb2","b":false,"i":10,"t":"test 5"}]
package com.datastax.alexott.demos.jdtest1;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.datastax.driver.core.ColumnDefinitions;
import com.datastax.driver.core.DataType;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
@SuppressWarnings("serial")
public class ResultSetSerializer extends StdSerializer<ResultSet> {
public ResultSetSerializer() {
this(null);
}
public ResultSetSerializer(Class<ResultSet> t) {
super(t);
}
void writeItem(Row row, int i, String name, DataType dt, JsonGenerator jgen) throws IOException {
if (DataType.cboolean().equals(dt)) {
jgen.writeBooleanField(name, row.getBool(i));
} else if(DataType.cint().equals(dt)) {
jgen.writeNumberField(name, row.getInt(i));
} else {
jgen.writeStringField(name, row.getObject(i).toString());
}
}
@Override
public void serialize(ResultSet rs, JsonGenerator jgen, SerializerProvider provider) throws IOException {
ColumnDefinitions cd = rs.getColumnDefinitions();
List<ColumnDefinitions.Definition> lcd = cd.asList();
int lsize = lcd.size();
String[] names = new String[lsize];
DataType[] types = new DataType[lsize];
for (int i = 0; i < lsize; i++) {
ColumnDefinitions.Definition cdef = lcd.get(i);
names[i] = cdef.getName();
types[i] = cdef.getType();
}
jgen.writeStartArray();
for (Row row : rs) {
jgen.writeStartObject();
for (int i = 0; i < lsize; i++) {
String name = names[i];
if (row.isNull(i)) {
jgen.writeNullField(name);
} else {
writeItem(row, i, name, types[i], jgen);
}
}
jgen.writeEndObject();
}
jgen.writeEndArray();
}
}
CREATE TABLE test.jtest (
id uuid PRIMARY KEY,
b boolean,
i int,
t text
);
package com.datastax.alexott.demos.jdtest1;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
public class Test1 {
public static void main(String[] args) throws JsonProcessingException {
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
Session session = cluster.connect();
ResultSet rs = session.execute("select json * from test.jtest ;");
int i = 0;
System.out.print("[");
for (Row row : rs) {
if (i > 0)
System.out.print(",");
i++;
String json = row.getString(0);
System.out.print(json);
}
System.out.println("]");
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(ResultSet.class, new ResultSetSerializer());
mapper.registerModule(module);
rs = session.execute("select * from test.jtest ;");
String json = mapper.writeValueAsString(rs);
System.out.println(json);
session.close();
cluster.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment