summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-12-11 08:46:38 +0000
committerArne Juul <arnej@yahooinc.com>2023-12-11 09:14:09 +0000
commit36858ea1a05231ac43bfd23a759bd5dcdcdd1960 (patch)
tree579f8977b5c4878213ddb95b3e586ed64feac3ff /vespajlib/src/main/java/com/yahoo
parent055b84652f6a0c9b517c76588c145d92216f6e02 (diff)
handle JSON null as NaN
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo')
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java15
1 files changed, 9 insertions, 6 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java b/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java
index 204c0331e3a..8cf36cbd038 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java
@@ -234,7 +234,7 @@ public class JsonFormat {
TensorAddress address = decodeAddress(cell.field("address"), builder.type());
Inspector value = cell.field("value");
- if (value.type() == Type.STRING || value.type() == Type.LONG || value.type() == Type.DOUBLE) {
+ if (value.valid()) {
builder.cell(address, decodeNumeric(value));
} else {
throw new IllegalArgumentException("Excepted a cell to contain a numeric value called 'value'");
@@ -269,7 +269,7 @@ public class JsonFormat {
values.traverse((ArrayTraverser) (__, value) -> {
if (value.type() == Type.ARRAY)
decodeNestedValues(value, builder, index);
- else if (value.type() == Type.LONG || value.type() == Type.DOUBLE || value.type() == Type.STRING)
+ else if (value.type() == Type.LONG || value.type() == Type.DOUBLE || value.type() == Type.STRING || value.type() == Type.NIX)
indexedBuilder.cellByDirectIndex(index.next(), decodeNumeric(value));
else
throw new IllegalArgumentException("Excepted the values array to contain numbers or nested arrays, not " + value.type());
@@ -446,14 +446,17 @@ public class JsonFormat {
return new TensorAddress.Builder(type).add(type.dimensions().get(0).name(), label).build();
}
-
private static double decodeNumeric(Inspector numericField) {
+ if (numericField.type() == Type.DOUBLE || numericField.type() == Type.LONG) {
+ return numericField.asDouble();
+ }
if (numericField.type() == Type.STRING) {
return decodeNumberString(numericField.asString());
}
- if (numericField.type() != Type.LONG && numericField.type() != Type.DOUBLE)
- throw new IllegalArgumentException("Excepted a number, not " + numericField.type());
- return numericField.asDouble();
+ if (numericField.type() == Type.NIX) {
+ return Double.NaN;
+ }
+ throw new IllegalArgumentException("Excepted a number, not " + numericField.type());
}
public static double decodeNumberString(String input) {