diff --git a/src/main/java/com/bc/zarr/ZarrHeader.java b/src/main/java/com/bc/zarr/ZarrHeader.java index 80f708c..da6a891 100644 --- a/src/main/java/com/bc/zarr/ZarrHeader.java +++ b/src/main/java/com/bc/zarr/ZarrHeader.java @@ -149,10 +149,11 @@ public void serialize(ZarrHeader value, JsonGenerator gen, SerializerProvider pr gen.writeObjectField("order", value.order); gen.writeObjectField("shape", value.getShape()); gen.writeNumberField("zarr_format", value.zarr_format); - if (value.nested != null) { - gen.writeBooleanField("nested", value.nested); + String dimensionSeparator = "."; + if (Boolean.TRUE.equals(value.nested)) { + dimensionSeparator = "/"; } - gen.writeEndObject(); + gen.writeStringField("dimension_separator", dimensionSeparator); } } @@ -188,9 +189,22 @@ public ZarrHeader deserialize(JsonParser p, DeserializationContext ctxt) throws } Boolean nested = null; - JsonNode nestedNode = (JsonNode) root.path("nested"); - if (!nestedNode.isMissingNode()) { - nested = nestedNode.asBoolean(); + JsonNode dimensionSeparatorNode = + (JsonNode) root.path("dimension_separator"); + if (!dimensionSeparatorNode.isMissingNode()) { + String dimensionSeparator = dimensionSeparatorNode.asText(); + switch (dimensionSeparator) { + case ".": + nested = false; + break; + case "/": + nested = true; + break; + default: + throw new IllegalArgumentException( + "Unsupported dimension separator: " + + dimensionSeparator); + } } return new ZarrHeader(shape, chunks, getRawDataType(dtype).toString(), getByteOrder(dtype), fill, compressor, nested); } diff --git a/src/test/java/com/bc/zarr/ZarrUtilsTest.java b/src/test/java/com/bc/zarr/ZarrUtilsTest.java index 22d2864..292ce30 100644 --- a/src/test/java/com/bc/zarr/ZarrUtilsTest.java +++ b/src/test/java/com/bc/zarr/ZarrUtilsTest.java @@ -184,7 +184,8 @@ private String expectedJson(boolean nullCompressor) { pw.println(" 10,"); pw.println(" 15"); pw.println(" ],"); - pw.println(" \"zarr_format\": 2"); + pw.println(" \"zarr_format\": 2,"); + pw.println(" \"dimension_separator\": \".\""); pw.println("}"); return strip(sw.toString());