diff --git a/gson/src/main/java/com/google/gson/JsonCompactFormatter.java b/gson/src/main/java/com/google/gson/JsonCompactFormatter.java index 3938039c..d85a8450 100644 --- a/gson/src/main/java/com/google/gson/JsonCompactFormatter.java +++ b/gson/src/main/java/com/google/gson/JsonCompactFormatter.java @@ -43,12 +43,12 @@ final class JsonCompactFormatter implements JsonFormatter { public void visitNull() throws IOException { writer.append("null"); } - + public void startArray(JsonArray array) throws IOException { writer.append('['); } - public void visitArrayMember(JsonArray parent, JsonPrimitive member, + public void visitArrayMember(JsonArray parent, JsonPrimitive member, boolean isFirst) throws IOException { if (!isFirst) { writer.append(','); @@ -56,14 +56,14 @@ final class JsonCompactFormatter implements JsonFormatter { member.toString(writer, escaper); } - public void visitArrayMember(JsonArray parent, JsonArray member, + public void visitArrayMember(JsonArray parent, JsonArray member, boolean isFirst) throws IOException { if (!isFirst) { writer.append(','); } } - public void visitArrayMember(JsonArray parent, JsonObject member, + public void visitArrayMember(JsonArray parent, JsonObject member, boolean isFirst) throws IOException { if (!isFirst) { writer.append(','); @@ -90,7 +90,7 @@ final class JsonCompactFormatter implements JsonFormatter { writer.append(','); } writer.append('"'); - writer.append(memberName); + writer.append(escaper.escapeJsonString(memberName)); writer.append("\":"); member.toString(writer, escaper); } @@ -101,7 +101,7 @@ final class JsonCompactFormatter implements JsonFormatter { writer.append(','); } writer.append('"'); - writer.append(memberName); + writer.append(escaper.escapeJsonString(memberName)); writer.append("\":"); } @@ -111,33 +111,33 @@ final class JsonCompactFormatter implements JsonFormatter { writer.append(','); } writer.append('"'); - writer.append(memberName); + writer.append(escaper.escapeJsonString(memberName)); writer.append("\":"); } - public void visitNullObjectMember(JsonObject parent, String memberName, + public void visitNullObjectMember(JsonObject parent, String memberName, boolean isFirst) throws IOException { if (serializeNulls) { visitObjectMember(parent, memberName, (JsonObject) null, isFirst); - } + } } - + public void endObject(JsonObject object) throws IOException { writer.append('}'); } } - + private final boolean escapeHtmlChars; JsonCompactFormatter() { this(true); } - + JsonCompactFormatter(boolean escapeHtmlChars) { this.escapeHtmlChars = escapeHtmlChars; } - public void format(JsonElement root, Appendable writer, + public void format(JsonElement root, Appendable writer, boolean serializeNulls) throws IOException { if (root == null) { return; diff --git a/gson/src/main/java/com/google/gson/JsonObject.java b/gson/src/main/java/com/google/gson/JsonObject.java index f9310f13..62c04343 100644 --- a/gson/src/main/java/com/google/gson/JsonObject.java +++ b/gson/src/main/java/com/google/gson/JsonObject.java @@ -53,7 +53,6 @@ public final class JsonObject extends JsonElement { */ public void add(String property, JsonElement value) { Preconditions.checkArgument(property != null && !"".equals(property.trim())); - if (value == null) { value = JsonNull.createJsonNull(); } @@ -205,7 +204,7 @@ public final class JsonObject extends JsonElement { sb.append(','); } sb.append('\"'); - sb.append(entry.getKey()); + sb.append(escaper.escapeJsonString(entry.getKey())); sb.append("\":"); entry.getValue().toString(sb, escaper); } diff --git a/gson/src/main/java/com/google/gson/JsonPrintFormatter.java b/gson/src/main/java/com/google/gson/JsonPrintFormatter.java index f9f00656..7fb5f868 100644 --- a/gson/src/main/java/com/google/gson/JsonPrintFormatter.java +++ b/gson/src/main/java/com/google/gson/JsonPrintFormatter.java @@ -39,7 +39,7 @@ final class JsonPrintFormatter implements JsonFormatter { JsonPrintFormatter() { this(true); } - + JsonPrintFormatter(boolean escapeHtmlChars) { this(DEFAULT_PRINT_MARGIN, DEFAULT_INDENTATION_SIZE, DEFAULT_RIGHT_MARGIN, escapeHtmlChars); } @@ -109,7 +109,7 @@ final class JsonPrintFormatter implements JsonFormatter { private void breakLineIfNeeded() throws IOException { breakLineIfThisToNextExceedsLimit(0); } - + private void breakLineIfThisToNextExceedsLimit(int nextLength) throws IOException { if (getLine().length() + nextLength > printMargin - rightMargin) { finishLine(); @@ -161,18 +161,18 @@ final class JsonPrintFormatter implements JsonFormatter { writer.beginArray(); } - public void visitArrayMember(JsonArray parent, JsonPrimitive member, + public void visitArrayMember(JsonArray parent, JsonPrimitive member, boolean isFirst) throws IOException { addCommaCheckingFirst(isFirst); writer.value(escapeJsonPrimitive(member)); } - public void visitArrayMember(JsonArray parent, JsonArray member, + public void visitArrayMember(JsonArray parent, JsonArray member, boolean first) throws IOException { addCommaCheckingFirst(first); } - public void visitArrayMember(JsonArray parent, JsonObject member, + public void visitArrayMember(JsonArray parent, JsonObject member, boolean first) throws IOException { addCommaCheckingFirst(first); } @@ -189,35 +189,35 @@ final class JsonPrintFormatter implements JsonFormatter { writer.beginObject(); } - public void visitObjectMember(JsonObject parent, String memberName, JsonPrimitive member, + public void visitObjectMember(JsonObject parent, String memberName, JsonPrimitive member, boolean isFirst) throws IOException { addCommaCheckingFirst(isFirst); - writer.key(memberName); + writer.key(escaper.escapeJsonString(memberName)); writer.fieldSeparator(); writer.value(escapeJsonPrimitive(member)); } - public void visitObjectMember(JsonObject parent, String memberName, JsonArray member, + public void visitObjectMember(JsonObject parent, String memberName, JsonArray member, boolean isFirst) throws IOException { addCommaCheckingFirst(isFirst); - writer.key(memberName); + writer.key(escaper.escapeJsonString(memberName)); writer.fieldSeparator(); } - public void visitObjectMember(JsonObject parent, String memberName, JsonObject member, + public void visitObjectMember(JsonObject parent, String memberName, JsonObject member, boolean isFirst) throws IOException { addCommaCheckingFirst(isFirst); - writer.key(memberName); + writer.key(escaper.escapeJsonString(memberName)); writer.fieldSeparator(); } - public void visitNullObjectMember(JsonObject parent, String memberName, + public void visitNullObjectMember(JsonObject parent, String memberName, boolean isFirst) throws IOException { if (serializeNulls) { visitObjectMember(parent, memberName, (JsonObject) null, isFirst); } } - + public void endObject(JsonObject object) { writer.endObject(); } @@ -229,7 +229,7 @@ final class JsonPrintFormatter implements JsonFormatter { public void visitNull() throws IOException { writer.value("null"); } - + private String escapeJsonPrimitive(JsonPrimitive member) throws IOException { StringBuilder builder = new StringBuilder(); member.toString(builder, escaper); @@ -237,14 +237,14 @@ final class JsonPrintFormatter implements JsonFormatter { } } - public void format(JsonElement root, Appendable writer, + public void format(JsonElement root, Appendable writer, boolean serializeNulls) throws IOException { if (root == null) { return; } JsonWriter jsonWriter = new JsonWriter(writer); JsonElementVisitor visitor = new PrintFormattingVisitor( - jsonWriter, new Escaper(escapeHtmlChars), serializeNulls); + jsonWriter, new Escaper(escapeHtmlChars), serializeNulls); JsonTreeNavigator navigator = new JsonTreeNavigator(visitor, serializeNulls); navigator.navigate(root); jsonWriter.finishLine();