diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-12-11 08:46:38 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-12-11 09:14:09 +0000 |
commit | 36858ea1a05231ac43bfd23a759bd5dcdcdd1960 (patch) | |
tree | 579f8977b5c4878213ddb95b3e586ed64feac3ff /vespajlib/src/main/java/com/yahoo | |
parent | 055b84652f6a0c9b517c76588c145d92216f6e02 (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.java | 15 |
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) { |