@@ -87,6 +87,7 @@ private static int genField(CodegenResult ctx, Binding binding, String toName, i
87
87
isCollectionValueNullable = true ;
88
88
}
89
89
boolean nullable = !valueClazz .isPrimitive ();
90
+ boolean omitZero = JsoniterSpi .getCurrentConfig ().omitZero ();
90
91
if (!binding .isNullable ) {
91
92
nullable = false ;
92
93
}
@@ -108,19 +109,30 @@ private static int genField(CodegenResult ctx, Binding binding, String toName, i
108
109
ctx .append (String .format ("if (%s == null) { stream.writeNull(); } else {" , valueAccessor ));
109
110
}
110
111
} else {
111
- notFirst = appendComma (ctx , notFirst );
112
- ctx .buffer ('"' );
113
- ctx .buffer (toName );
114
- ctx .buffer ('"' );
115
- ctx .buffer (':' );
112
+ if (encoder == null && valueClazz .isPrimitive () && !(valueClazz == String .class ) && omitZero ) {
113
+ if (notFirst == 0 ) {
114
+ notFirst = 2 ;
115
+ ctx .append ("boolean notFirst = false;" );
116
+ }
117
+ String t = CodegenImplNative .getTypeName (binding .valueType );
118
+ ctx .append (String .format ("if (!(((%s)%s) == 0)) {" , t , valueAccessor ));
119
+ appendComma (ctx , notFirst );
120
+ ctx .append (CodegenResult .bufferToWriteOp ("\" " + toName + "\" :" ));
121
+ } else {
122
+ notFirst = appendComma (ctx , notFirst );
123
+ ctx .buffer ('"' );
124
+ ctx .buffer (toName );
125
+ ctx .buffer ('"' );
126
+ ctx .buffer (':' );
127
+ }
116
128
}
117
129
if (encoder == null ) {
118
130
CodegenImplNative .genWriteOp (ctx , valueAccessor , binding .valueType , nullable , isCollectionValueNullable );
119
131
} else {
120
132
ctx .append (String .format ("com.jsoniter.output.CodegenAccess.writeVal(\" %s\" , %s, stream);" ,
121
133
fieldCacheKey , valueAccessor ));
122
134
}
123
- if (nullable ) {
135
+ if (nullable || omitZero ) {
124
136
ctx .append ("}" );
125
137
}
126
138
return notFirst ;
0 commit comments