diff options
author | Lester Solbakken <lesters@oath.com> | 2022-05-29 15:32:41 +0200 |
---|---|---|
committer | Lester Solbakken <lesters@oath.com> | 2022-05-29 15:32:41 +0200 |
commit | 03a474a19bfa518d9d71f4981fad2aec0722a755 (patch) | |
tree | a1f1222be18f7324279a78ef745f8285515cc916 /document/src/main/java/com/yahoo/document/json | |
parent | 9aebfc50b7f0f967bb68e5e6986bc03afc469bd5 (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.java | 15 | ||||
-rw-r--r-- | document/src/main/java/com/yahoo/document/json/JsonWriter.java | 14 |
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 |