From cf386188c88c39902d4ef7f9a6be20379e288f5f Mon Sep 17 00:00:00 2001 From: Kevin Cantu Date: Thu, 30 Aug 2012 21:03:19 -0700 Subject: [PATCH] Various JSON pretty printing tweaks --- src/libstd/json.rs | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/libstd/json.rs b/src/libstd/json.rs index c8f15d47469..7c5a6187a57 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -102,14 +102,20 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) { String(s) => wr.write_str(escape_str(*s)), Boolean(b) => wr.write_str(if b { ~"true" } else { ~"false" }), List(vv) => { + if vv.len() == 0u { + wr.write_str(~"[]"); + return; + } + + let inner_indent = indent + 2; + // [ - wr.write_str(spaces(indent)); - wr.write_str("[ "); + wr.write_str("[\n"); + wr.write_str(spaces(inner_indent)); // [ elem, // elem, // elem ] - let inner_indent = indent + 2; let mut first = true; for (*vv).each |item| { if !first { @@ -121,9 +127,18 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) { }; // ] - wr.write_str(~" ]"); + wr.write_str("\n"); + wr.write_str(spaces(indent)); + wr.write_str(~"]"); } Dict(dd) => { + if dd.size() == 0u { + wr.write_str(~"{}"); + return; + } + + let inner_indent = indent + 2; + // convert from a dictionary let mut pairs = ~[]; for dd.each |key, value| { @@ -134,13 +149,12 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) { let sorted_pairs = sort::merge_sort(|a,b| *a <= *b, pairs); // { - wr.write_str(spaces(indent)); - wr.write_str(~"{ "); + wr.write_str(~"{\n"); + wr.write_str(spaces(inner_indent)); // { k: v, // k: v, // k: v } - let inner_indent = indent + 2; let mut first = true; for sorted_pairs.each |kv| { let (key, value) = kv; @@ -150,13 +164,15 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) { } first = false; let key = str::append(escape_str(key), ~": "); - let key_indent = str::len(key); + let key_indent = inner_indent + str::len(key); wr.write_str(key); to_writer_pretty(wr, value, key_indent); }; // } - wr.write_str(~" }"); + wr.write_str(~"\n"); + wr.write_str(spaces(indent)); + wr.write_str(~"}"); } Null => wr.write_str(~"null") } @@ -892,6 +908,12 @@ mod tests { assert from_str(~" \"foo\" ") == Ok(String(@~"foo")); } + #[test] + fn test_unicode_hex_escapes_in_str() { + assert from_str(~"\"\\u12ab\"") == Ok(String(@~"\u12ab")); + assert from_str(~"\"\\uAB12\"") == Ok(String(@~"\uAB12")); + } + #[test] fn test_read_list() { assert from_str(~"[") ==