Skip to content

Commit ba367c9

Browse files
committed
add may be empty array
1 parent 8b2ddaa commit ba367c9

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

src/main/java/com/jsoniter/spi/Decoder.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.jsoniter.CodegenAccess;
44
import com.jsoniter.JsonIterator;
5+
import com.jsoniter.ValueType;
56

67
import java.io.IOException;
78

@@ -244,4 +245,21 @@ public double decodeDouble(JsonIterator iter) throws IOException {
244245
return val;
245246
}
246247
}
248+
249+
class MaybeEmptyArrayDecoder implements Decoder {
250+
251+
@Override
252+
public Object decode(JsonIterator iter) throws IOException {
253+
if (iter.whatIsNext() == ValueType.ARRAY) {
254+
if (iter.readArray()) {
255+
throw iter.reportError("MaybeEmptyArrayDecoder", "this field is object. if input is array, it can only be empty");
256+
} else {
257+
// empty array parsed as null
258+
return null;
259+
}
260+
} else {
261+
return iter.read(iter);
262+
}
263+
}
264+
}
247265
}

src/test/java/com/jsoniter/TestObject.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.jsoniter;
22

3+
import com.jsoniter.annotation.JsonProperty;
4+
import com.jsoniter.annotation.JsoniterAnnotationSupport;
35
import com.jsoniter.any.Any;
6+
import com.jsoniter.spi.Decoder;
47
import com.jsoniter.spi.EmptyExtension;
58
import com.jsoniter.spi.JsoniterSpi;
69
import junit.framework.TestCase;
@@ -163,4 +166,15 @@ public void test_enum() throws IOException {
163166
obj = JsonIterator.deserialize("{\"field1\":\"WOW\"}", TestObject5.class);
164167
assertEquals(TestObject5.MyEnum.WOW, obj.field1);
165168
}
169+
170+
public static class TestObject6 {
171+
@JsonProperty(decoder = Decoder.MaybeEmptyArrayDecoder.class)
172+
public Map<String, Object> field1;
173+
}
174+
175+
public void test_maybe_empty_array_field() {
176+
JsoniterAnnotationSupport.enable();
177+
TestObject6 obj = JsonIterator.deserialize("{\"field1\":[]}", TestObject6.class);
178+
assertNull(obj.field1);
179+
}
166180
}

0 commit comments

Comments
 (0)