aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/main/java/com/yahoo/document/json
diff options
context:
space:
mode:
authorLester Solbakken <lesters@oath.com>2022-05-29 15:32:41 +0200
committerLester Solbakken <lesters@oath.com>2022-05-29 15:32:41 +0200
commit03a474a19bfa518d9d71f4981fad2aec0722a755 (patch)
treea1f1222be18f7324279a78ef745f8285515cc916 /document/src/main/java/com/yahoo/document/json
parent9aebfc50b7f0f967bb68e5e6986bc03afc469bd5 (diff)
Add tensor short form rendering to document/v1
Diffstat (limited to 'document/src/main/java/com/yahoo/document/json')
-rw-r--r--document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java15
-rw-r--r--document/src/main/java/com/yahoo/document/json/JsonWriter.java14
2 files changed, 28 insertions, 1 deletions
diff --git a/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java b/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
index 340bd542885..a9d34fc78d8 100644
--- a/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
+++ b/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
@@ -32,10 +32,12 @@ import com.yahoo.document.serialization.FieldWriter;
import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.TensorAddress;
import com.yahoo.tensor.TensorType;
+import com.yahoo.tensor.serialization.JsonFormat;
import com.yahoo.vespa.objects.FieldBase;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Iterator;
import java.util.Map;
@@ -71,6 +73,19 @@ public class JsonSerializationHelper {
}
}
+ public static void serializeTensorFieldShortForm(JsonGenerator generator, FieldBase field, TensorFieldValue value) {
+ wrapIOException(() -> {
+ fieldNameIfNotNull(generator, field);
+ if (value.getTensor().isPresent()) {
+ Tensor tensor = value.getTensor().get();
+ generator.writeRawValue(new String(JsonFormat.encodeShortForm(tensor), StandardCharsets.UTF_8));
+ } else {
+ generator.writeStartObject();
+ generator.writeEndObject();
+ }
+ });
+ }
+
public static void serializeTensorField(JsonGenerator generator, FieldBase field, TensorFieldValue value) {
wrapIOException(() -> {
fieldNameIfNotNull(generator, field);
diff --git a/document/src/main/java/com/yahoo/document/json/JsonWriter.java b/document/src/main/java/com/yahoo/document/json/JsonWriter.java
index 95faf753877..05147d2c0ab 100644
--- a/document/src/main/java/com/yahoo/document/json/JsonWriter.java
+++ b/document/src/main/java/com/yahoo/document/json/JsonWriter.java
@@ -63,6 +63,7 @@ import static com.yahoo.document.json.JsonSerializationHelper.serializeStringFie
import static com.yahoo.document.json.JsonSerializationHelper.serializeStructField;
import static com.yahoo.document.json.JsonSerializationHelper.serializeStructuredField;
import static com.yahoo.document.json.JsonSerializationHelper.serializeTensorField;
+import static com.yahoo.document.json.JsonSerializationHelper.serializeTensorFieldShortForm;
import static com.yahoo.document.json.JsonSerializationHelper.serializeWeightedSet;
import static com.yahoo.document.json.document.DocumentParser.FIELDS;
import static com.yahoo.document.json.document.DocumentParser.REMOVE;
@@ -77,6 +78,8 @@ public class JsonWriter implements DocumentWriter {
private static final JsonFactory jsonFactory = new JsonFactory();
private final JsonGenerator generator;
+ private final boolean tensorShortForm;
+
// I really hate exception unsafe constructors, but the alternative
// requires generator to not be a final
/**
@@ -108,7 +111,12 @@ public class JsonWriter implements DocumentWriter {
* the output JSON generator
*/
public JsonWriter(JsonGenerator generator) {
+ this(generator, false);
+ }
+
+ public JsonWriter(JsonGenerator generator, boolean tensorShortForm) {
this.generator = generator;
+ this.tensorShortForm = tensorShortForm;
}
/**
@@ -206,7 +214,11 @@ public class JsonWriter implements DocumentWriter {
@Override
public void write(FieldBase field, TensorFieldValue value) {
- serializeTensorField(generator, field, value);
+ if (tensorShortForm) {
+ serializeTensorFieldShortForm(generator, field, value);
+ } else {
+ serializeTensorField(generator, field, value);
+ }
}
@Override