diff options
| author | Kevin Cantu <me@kevincantu.org> | 2012-08-30 21:03:19 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2012-08-31 07:11:07 -0700 |
| commit | cf386188c88c39902d4ef7f9a6be20379e288f5f (patch) | |
| tree | 32672390e49cda528302b0a08960180406012e10 /src | |
| parent | 4fb675be2f42a828fb5a6570b9aad2c65f4598b9 (diff) | |
Various JSON pretty printing tweaks
Diffstat (limited to 'src')
| -rw-r--r-- | src/libstd/json.rs | 40 |
1 files 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") } @@ -893,6 +909,12 @@ mod tests { } #[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(~"[") == Err({line: 1u, col: 2u, msg: @~"EOF while parsing value"}); |
