Fix for Issue 178.

This commit is contained in:
Joel Leitch 2010-08-21 06:50:52 +00:00
parent 3fc4bcc061
commit 5bffa1f679
3 changed files with 30 additions and 31 deletions

View File

@ -43,12 +43,12 @@ final class JsonCompactFormatter implements JsonFormatter {
public void visitNull() throws IOException { public void visitNull() throws IOException {
writer.append("null"); writer.append("null");
} }
public void startArray(JsonArray array) throws IOException { public void startArray(JsonArray array) throws IOException {
writer.append('['); writer.append('[');
} }
public void visitArrayMember(JsonArray parent, JsonPrimitive member, public void visitArrayMember(JsonArray parent, JsonPrimitive member,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
if (!isFirst) { if (!isFirst) {
writer.append(','); writer.append(',');
@ -56,14 +56,14 @@ final class JsonCompactFormatter implements JsonFormatter {
member.toString(writer, escaper); member.toString(writer, escaper);
} }
public void visitArrayMember(JsonArray parent, JsonArray member, public void visitArrayMember(JsonArray parent, JsonArray member,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
if (!isFirst) { if (!isFirst) {
writer.append(','); writer.append(',');
} }
} }
public void visitArrayMember(JsonArray parent, JsonObject member, public void visitArrayMember(JsonArray parent, JsonObject member,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
if (!isFirst) { if (!isFirst) {
writer.append(','); writer.append(',');
@ -90,7 +90,7 @@ final class JsonCompactFormatter implements JsonFormatter {
writer.append(','); writer.append(',');
} }
writer.append('"'); writer.append('"');
writer.append(memberName); writer.append(escaper.escapeJsonString(memberName));
writer.append("\":"); writer.append("\":");
member.toString(writer, escaper); member.toString(writer, escaper);
} }
@ -101,7 +101,7 @@ final class JsonCompactFormatter implements JsonFormatter {
writer.append(','); writer.append(',');
} }
writer.append('"'); writer.append('"');
writer.append(memberName); writer.append(escaper.escapeJsonString(memberName));
writer.append("\":"); writer.append("\":");
} }
@ -111,33 +111,33 @@ final class JsonCompactFormatter implements JsonFormatter {
writer.append(','); writer.append(',');
} }
writer.append('"'); writer.append('"');
writer.append(memberName); writer.append(escaper.escapeJsonString(memberName));
writer.append("\":"); writer.append("\":");
} }
public void visitNullObjectMember(JsonObject parent, String memberName, public void visitNullObjectMember(JsonObject parent, String memberName,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
if (serializeNulls) { if (serializeNulls) {
visitObjectMember(parent, memberName, (JsonObject) null, isFirst); visitObjectMember(parent, memberName, (JsonObject) null, isFirst);
} }
} }
public void endObject(JsonObject object) throws IOException { public void endObject(JsonObject object) throws IOException {
writer.append('}'); writer.append('}');
} }
} }
private final boolean escapeHtmlChars; private final boolean escapeHtmlChars;
JsonCompactFormatter() { JsonCompactFormatter() {
this(true); this(true);
} }
JsonCompactFormatter(boolean escapeHtmlChars) { JsonCompactFormatter(boolean escapeHtmlChars) {
this.escapeHtmlChars = escapeHtmlChars; this.escapeHtmlChars = escapeHtmlChars;
} }
public void format(JsonElement root, Appendable writer, public void format(JsonElement root, Appendable writer,
boolean serializeNulls) throws IOException { boolean serializeNulls) throws IOException {
if (root == null) { if (root == null) {
return; return;

View File

@ -53,7 +53,6 @@ public final class JsonObject extends JsonElement {
*/ */
public void add(String property, JsonElement value) { public void add(String property, JsonElement value) {
Preconditions.checkArgument(property != null && !"".equals(property.trim())); Preconditions.checkArgument(property != null && !"".equals(property.trim()));
if (value == null) { if (value == null) {
value = JsonNull.createJsonNull(); value = JsonNull.createJsonNull();
} }
@ -205,7 +204,7 @@ public final class JsonObject extends JsonElement {
sb.append(','); sb.append(',');
} }
sb.append('\"'); sb.append('\"');
sb.append(entry.getKey()); sb.append(escaper.escapeJsonString(entry.getKey()));
sb.append("\":"); sb.append("\":");
entry.getValue().toString(sb, escaper); entry.getValue().toString(sb, escaper);
} }

View File

@ -39,7 +39,7 @@ final class JsonPrintFormatter implements JsonFormatter {
JsonPrintFormatter() { JsonPrintFormatter() {
this(true); this(true);
} }
JsonPrintFormatter(boolean escapeHtmlChars) { JsonPrintFormatter(boolean escapeHtmlChars) {
this(DEFAULT_PRINT_MARGIN, DEFAULT_INDENTATION_SIZE, DEFAULT_RIGHT_MARGIN, 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 { private void breakLineIfNeeded() throws IOException {
breakLineIfThisToNextExceedsLimit(0); breakLineIfThisToNextExceedsLimit(0);
} }
private void breakLineIfThisToNextExceedsLimit(int nextLength) throws IOException { private void breakLineIfThisToNextExceedsLimit(int nextLength) throws IOException {
if (getLine().length() + nextLength > printMargin - rightMargin) { if (getLine().length() + nextLength > printMargin - rightMargin) {
finishLine(); finishLine();
@ -161,18 +161,18 @@ final class JsonPrintFormatter implements JsonFormatter {
writer.beginArray(); writer.beginArray();
} }
public void visitArrayMember(JsonArray parent, JsonPrimitive member, public void visitArrayMember(JsonArray parent, JsonPrimitive member,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
addCommaCheckingFirst(isFirst); addCommaCheckingFirst(isFirst);
writer.value(escapeJsonPrimitive(member)); writer.value(escapeJsonPrimitive(member));
} }
public void visitArrayMember(JsonArray parent, JsonArray member, public void visitArrayMember(JsonArray parent, JsonArray member,
boolean first) throws IOException { boolean first) throws IOException {
addCommaCheckingFirst(first); addCommaCheckingFirst(first);
} }
public void visitArrayMember(JsonArray parent, JsonObject member, public void visitArrayMember(JsonArray parent, JsonObject member,
boolean first) throws IOException { boolean first) throws IOException {
addCommaCheckingFirst(first); addCommaCheckingFirst(first);
} }
@ -189,35 +189,35 @@ final class JsonPrintFormatter implements JsonFormatter {
writer.beginObject(); writer.beginObject();
} }
public void visitObjectMember(JsonObject parent, String memberName, JsonPrimitive member, public void visitObjectMember(JsonObject parent, String memberName, JsonPrimitive member,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
addCommaCheckingFirst(isFirst); addCommaCheckingFirst(isFirst);
writer.key(memberName); writer.key(escaper.escapeJsonString(memberName));
writer.fieldSeparator(); writer.fieldSeparator();
writer.value(escapeJsonPrimitive(member)); 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 { boolean isFirst) throws IOException {
addCommaCheckingFirst(isFirst); addCommaCheckingFirst(isFirst);
writer.key(memberName); writer.key(escaper.escapeJsonString(memberName));
writer.fieldSeparator(); writer.fieldSeparator();
} }
public void visitObjectMember(JsonObject parent, String memberName, JsonObject member, public void visitObjectMember(JsonObject parent, String memberName, JsonObject member,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
addCommaCheckingFirst(isFirst); addCommaCheckingFirst(isFirst);
writer.key(memberName); writer.key(escaper.escapeJsonString(memberName));
writer.fieldSeparator(); writer.fieldSeparator();
} }
public void visitNullObjectMember(JsonObject parent, String memberName, public void visitNullObjectMember(JsonObject parent, String memberName,
boolean isFirst) throws IOException { boolean isFirst) throws IOException {
if (serializeNulls) { if (serializeNulls) {
visitObjectMember(parent, memberName, (JsonObject) null, isFirst); visitObjectMember(parent, memberName, (JsonObject) null, isFirst);
} }
} }
public void endObject(JsonObject object) { public void endObject(JsonObject object) {
writer.endObject(); writer.endObject();
} }
@ -229,7 +229,7 @@ final class JsonPrintFormatter implements JsonFormatter {
public void visitNull() throws IOException { public void visitNull() throws IOException {
writer.value("null"); writer.value("null");
} }
private String escapeJsonPrimitive(JsonPrimitive member) throws IOException { private String escapeJsonPrimitive(JsonPrimitive member) throws IOException {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
member.toString(builder, escaper); 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 { boolean serializeNulls) throws IOException {
if (root == null) { if (root == null) {
return; return;
} }
JsonWriter jsonWriter = new JsonWriter(writer); JsonWriter jsonWriter = new JsonWriter(writer);
JsonElementVisitor visitor = new PrintFormattingVisitor( JsonElementVisitor visitor = new PrintFormattingVisitor(
jsonWriter, new Escaper(escapeHtmlChars), serializeNulls); jsonWriter, new Escaper(escapeHtmlChars), serializeNulls);
JsonTreeNavigator navigator = new JsonTreeNavigator(visitor, serializeNulls); JsonTreeNavigator navigator = new JsonTreeNavigator(visitor, serializeNulls);
navigator.navigate(root); navigator.navigate(root);
jsonWriter.finishLine(); jsonWriter.finishLine();