Skip to content

Commit 743093a

Browse files
committed
Add optional omit zero
1 parent 1192faf commit 743093a

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

src/main/java/com/jsoniter/output/ReflectionObjectEncoder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,14 @@ private void enocde_(Object obj, JsonStream stream) throws Exception {
5959
}
6060
stream.writeObjectStart();
6161
boolean notFirst = false;
62+
boolean omitZero = JsoniterSpi.getCurrentConfig().omitZero();
6263
for (Binding field : desc.fields) {
6364
Object val = field.field.get(obj);
6465
for (String toName : field.toNames) {
6566
if (!(field.shouldOmitNull && val == null)) {
67+
if (omitZero && val instanceof Number && ((Number) val).doubleValue() == 0) {
68+
continue;
69+
}
6670
if (notFirst) {
6771
stream.writeMore();
6872
} else {
@@ -81,6 +85,9 @@ private void enocde_(Object obj, JsonStream stream) throws Exception {
8185
Object val = getter.method.invoke(obj);
8286
for (String toName : getter.toNames) {
8387
if (!(getter.shouldOmitNull && val == null)) {
88+
if (omitZero && val instanceof Number && ((Number) val).doubleValue() == 0) {
89+
continue;
90+
}
8491
if (notFirst) {
8592
stream.writeMore();
8693
} else {

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ public int indentionStep() {
7676
return builder.indentionStep;
7777
}
7878

79+
public boolean omitZero() {
80+
return builder.omitZero;
81+
}
82+
7983
public boolean escapeUnicode() {
8084
return builder.escapeUnicode;
8185
}
@@ -90,6 +94,7 @@ public static class Builder {
9094
private EncodingMode encodingMode;
9195
private int indentionStep;
9296
private boolean escapeUnicode = true;
97+
private boolean omitZero;
9398

9499
public Builder() {
95100
String envMode = System.getenv("JSONITER_DECODING_MODE");
@@ -121,6 +126,11 @@ public Builder indentionStep(int indentionStep) {
121126
return this;
122127
}
123128

129+
public Builder omitZero(boolean b) {
130+
omitZero = b;
131+
return this;
132+
}
133+
124134
public Builder escapeUnicode(boolean escapeUnicode) {
125135
this.escapeUnicode = escapeUnicode;
126136
return this;
@@ -159,6 +169,7 @@ public boolean equals(Object o) {
159169
if (indentionStep != builder.indentionStep) return false;
160170
if (escapeUnicode != builder.escapeUnicode) return false;
161171
if (decodingMode != builder.decodingMode) return false;
172+
if (omitZero != builder.omitZero) return false;
162173
return encodingMode == builder.encodingMode;
163174
}
164175

@@ -168,6 +179,7 @@ public int hashCode() {
168179
result = 31 * result + (encodingMode != null ? encodingMode.hashCode() : 0);
169180
result = 31 * result + indentionStep;
170181
result = 31 * result + (escapeUnicode ? 1 : 0);
182+
result = 31 * result + (omitZero ? 1 : 0);
171183
return result;
172184
}
173185

@@ -177,6 +189,7 @@ public Builder copy() {
177189
builder.decodingMode = decodingMode;
178190
builder.indentionStep = indentionStep;
179191
builder.escapeUnicode = escapeUnicode;
192+
builder.omitZero = omitZero;
180193
return builder;
181194
}
182195
}

0 commit comments

Comments
 (0)