Skip to content
This repository was archived by the owner on Apr 14, 2023. It is now read-only.

Commit ca365c0

Browse files
committed
Add partial support for #7 via isEmpty() method -- more work needed for 2.7
1 parent 9b2891e commit ca365c0

File tree

4 files changed

+63
-52
lines changed

4 files changed

+63
-52
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<artifactId>jackson-datatype-json-org</artifactId>
1010
<packaging>bundle</packaging>
1111
<name>Jackson-datatype-json.org</name>
12-
<version>2.6.0-rc5-SNAPSHOT</version>
12+
<version>2.6.0-SNAPSHOT</version>
1313
<description>Support for datatypes of "org.json" JSON library (see http://json.org/java),
1414
mainly to make it easier to upgrade code to Jackson, using automated conversions.
1515
</description>

release-notes/VERSION

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Project: jackson-datatype-json-org
66

77
2.6.0 (not yet released)
88

9+
- Add `isEmpty()` method for JSONObject, JSONArray serializers (partial support)
10+
911
2.5.3 (24-Apr-2015)
1012
2.5.2 (29-Mar-2015)
1113
2.5.1 (06-Feb-2015)

src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONArraySerializer.java

+28-24
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,40 @@
77
import org.json.JSONObject;
88

99
import com.fasterxml.jackson.core.*;
10-
1110
import com.fasterxml.jackson.databind.*;
1211
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
1312

1413
public class JSONArraySerializer extends JSONBaseSerializer<JSONArray>
1514
{
15+
private static final long serialVersionUID = 1L;
16+
1617
public final static JSONArraySerializer instance = new JSONArraySerializer();
1718

1819
public JSONArraySerializer()
1920
{
2021
super(JSONArray.class);
2122
}
23+
24+
@Override // since 2.6
25+
public boolean isEmpty(SerializerProvider provider, JSONArray value) {
26+
return (value == null) || value.length() == 0;
27+
}
2228

2329
@Override
24-
public void serialize(JSONArray value, JsonGenerator jgen, SerializerProvider provider)
25-
throws IOException, JsonGenerationException
30+
public void serialize(JSONArray value, JsonGenerator g, SerializerProvider provider) throws IOException
2631
{
27-
jgen.writeStartArray();
28-
serializeContents(value, jgen, provider);
29-
jgen.writeEndArray();
32+
g.writeStartArray();
33+
serializeContents(value, g, provider);
34+
g.writeEndArray();
3035
}
3136

3237
@Override
33-
public void serializeWithType(JSONArray value, JsonGenerator jgen, SerializerProvider provider,
34-
TypeSerializer typeSer)
35-
throws IOException, JsonGenerationException
38+
public void serializeWithType(JSONArray value, JsonGenerator g, SerializerProvider provider,
39+
TypeSerializer typeSer) throws IOException
3640
{
37-
typeSer.writeTypePrefixForArray(value, jgen);
38-
serializeContents(value, jgen, provider);
39-
typeSer.writeTypeSuffixForArray(value, jgen);
41+
typeSer.writeTypePrefixForArray(value, g);
42+
serializeContents(value, g, provider);
43+
typeSer.writeTypeSuffixForArray(value, g);
4044
}
4145

4246
@Override
@@ -46,36 +50,36 @@ public JsonNode getSchema(SerializerProvider provider, Type typeHint)
4650
return createSchemaNode("array", true);
4751
}
4852

49-
protected void serializeContents(JSONArray value, JsonGenerator jgen, SerializerProvider provider)
53+
protected void serializeContents(JSONArray value, JsonGenerator g, SerializerProvider provider)
5054
throws IOException, JsonGenerationException
5155
{
5256
for (int i = 0, len = value.length(); i < len; ++i) {
5357
Object ob = value.opt(i);
5458
if (ob == null || ob == JSONObject.NULL) {
55-
jgen.writeNull();
59+
g.writeNull();
5660
continue;
5761
}
5862
Class<?> cls = ob.getClass();
5963
if (cls == JSONObject.class) {
60-
JSONObjectSerializer.instance.serialize((JSONObject) ob, jgen, provider);
64+
JSONObjectSerializer.instance.serialize((JSONObject) ob, g, provider);
6165
} else if (cls == JSONArray.class) {
62-
serialize((JSONArray) ob, jgen, provider);
66+
serialize((JSONArray) ob, g, provider);
6367
} else if (cls == String.class) {
64-
jgen.writeString((String) ob);
68+
g.writeString((String) ob);
6569
} else if (cls == Integer.class) {
66-
jgen.writeNumber(((Integer) ob).intValue());
70+
g.writeNumber(((Integer) ob).intValue());
6771
} else if (cls == Long.class) {
68-
jgen.writeNumber(((Long) ob).longValue());
72+
g.writeNumber(((Long) ob).longValue());
6973
} else if (cls == Boolean.class) {
70-
jgen.writeBoolean(((Boolean) ob).booleanValue());
74+
g.writeBoolean(((Boolean) ob).booleanValue());
7175
} else if (cls == Double.class) {
72-
jgen.writeNumber(((Double) ob).doubleValue());
76+
g.writeNumber(((Double) ob).doubleValue());
7377
} else if (JSONObject.class.isAssignableFrom(cls)) { // sub-class
74-
JSONObjectSerializer.instance.serialize((JSONObject) ob, jgen, provider);
78+
JSONObjectSerializer.instance.serialize((JSONObject) ob, g, provider);
7579
} else if (JSONArray.class.isAssignableFrom(cls)) { // sub-class
76-
serialize((JSONArray) ob, jgen, provider);
80+
serialize((JSONArray) ob, g, provider);
7781
} else {
78-
provider.defaultSerializeValue(ob, jgen);
82+
provider.defaultSerializeValue(ob, g);
7983
}
8084
}
8185
}

src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONObjectSerializer.java

+32-27
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,43 @@
55
import java.util.Iterator;
66

77
import com.fasterxml.jackson.core.*;
8-
98
import com.fasterxml.jackson.databind.*;
109
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
1110

1211
import org.json.*;
1312

1413
public class JSONObjectSerializer extends JSONBaseSerializer<JSONObject>
1514
{
15+
private static final long serialVersionUID = 1L;
16+
1617
public final static JSONObjectSerializer instance = new JSONObjectSerializer();
1718

1819
public JSONObjectSerializer()
1920
{
2021
super(JSONObject.class);
2122
}
22-
23+
24+
@Override // since 2.6
25+
public boolean isEmpty(SerializerProvider provider, JSONObject value) {
26+
return (value == null) || value.length() == 0;
27+
}
28+
2329
@Override
24-
public void serialize(JSONObject value, JsonGenerator jgen, SerializerProvider provider)
25-
throws IOException, JsonGenerationException
30+
public void serialize(JSONObject value, JsonGenerator g, SerializerProvider provider)
31+
throws IOException
2632
{
27-
jgen.writeStartObject();
28-
serializeContents(value, jgen, provider);
29-
jgen.writeEndObject();
33+
g.writeStartObject();
34+
serializeContents(value, g, provider);
35+
g.writeEndObject();
3036
}
3137

3238
@Override
33-
public void serializeWithType(JSONObject value, JsonGenerator jgen, SerializerProvider provider,
34-
TypeSerializer typeSer)
35-
throws IOException, JsonGenerationException
39+
public void serializeWithType(JSONObject value, JsonGenerator g, SerializerProvider provider,
40+
TypeSerializer typeSer) throws IOException
3641
{
37-
typeSer.writeTypePrefixForObject(value, jgen);
38-
serializeContents(value, jgen, provider);
39-
typeSer.writeTypeSuffixForObject(value, jgen);
42+
typeSer.writeTypePrefixForObject(value, g);
43+
serializeContents(value, g, provider);
44+
typeSer.writeTypeSuffixForObject(value, g);
4045
}
4146

4247
@Override
@@ -46,41 +51,41 @@ public JsonNode getSchema(SerializerProvider provider, Type typeHint)
4651
return createSchemaNode("object", true);
4752
}
4853

49-
protected void serializeContents(JSONObject value, JsonGenerator jgen, SerializerProvider provider)
50-
throws IOException, JsonGenerationException
54+
protected void serializeContents(JSONObject value, JsonGenerator g, SerializerProvider provider)
55+
throws IOException
5156
{
5257
Iterator<?> it = value.keys();
5358
while (it.hasNext()) {
5459
String key = (String) it.next();
5560
Object ob = value.opt(key);
5661
if (ob == null || ob == JSONObject.NULL) {
5762
if (provider.isEnabled(SerializationFeature.WRITE_NULL_MAP_VALUES)) {
58-
jgen.writeNullField(key);
63+
g.writeNullField(key);
5964
}
6065
continue;
6166
}
62-
jgen.writeFieldName(key);
67+
g.writeFieldName(key);
6368
Class<?> cls = ob.getClass();
6469
if (cls == JSONObject.class) {
65-
serialize((JSONObject) ob, jgen, provider);
70+
serialize((JSONObject) ob, g, provider);
6671
} else if (cls == JSONArray.class) {
67-
JSONArraySerializer.instance.serialize((JSONArray) ob, jgen, provider);
72+
JSONArraySerializer.instance.serialize((JSONArray) ob, g, provider);
6873
} else if (cls == String.class) {
69-
jgen.writeString((String) ob);
74+
g.writeString((String) ob);
7075
} else if (cls == Integer.class) {
71-
jgen.writeNumber(((Integer) ob).intValue());
76+
g.writeNumber(((Integer) ob).intValue());
7277
} else if (cls == Long.class) {
73-
jgen.writeNumber(((Long) ob).longValue());
78+
g.writeNumber(((Long) ob).longValue());
7479
} else if (cls == Boolean.class) {
75-
jgen.writeBoolean(((Boolean) ob).booleanValue());
80+
g.writeBoolean(((Boolean) ob).booleanValue());
7681
} else if (cls == Double.class) {
77-
jgen.writeNumber(((Double) ob).doubleValue());
82+
g.writeNumber(((Double) ob).doubleValue());
7883
} else if (JSONObject.class.isAssignableFrom(cls)) { // sub-class
79-
serialize((JSONObject) ob, jgen, provider);
84+
serialize((JSONObject) ob, g, provider);
8085
} else if (JSONArray.class.isAssignableFrom(cls)) { // sub-class
81-
JSONArraySerializer.instance.serialize((JSONArray) ob, jgen, provider);
86+
JSONArraySerializer.instance.serialize((JSONArray) ob, g, provider);
8287
} else {
83-
provider.defaultSerializeValue(ob, jgen);
88+
provider.defaultSerializeValue(ob, g);
8489
}
8590
}
8691
}

0 commit comments

Comments
 (0)