Various JSON pretty printing tweaks
This commit is contained in:
parent
4fb675be2f
commit
cf386188c8
1 changed files with 31 additions and 9 deletions
|
@ -102,14 +102,20 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) {
|
||||||
String(s) => wr.write_str(escape_str(*s)),
|
String(s) => wr.write_str(escape_str(*s)),
|
||||||
Boolean(b) => wr.write_str(if b { ~"true" } else { ~"false" }),
|
Boolean(b) => wr.write_str(if b { ~"true" } else { ~"false" }),
|
||||||
List(vv) => {
|
List(vv) => {
|
||||||
|
if vv.len() == 0u {
|
||||||
|
wr.write_str(~"[]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let inner_indent = indent + 2;
|
||||||
|
|
||||||
// [
|
// [
|
||||||
wr.write_str(spaces(indent));
|
wr.write_str("[\n");
|
||||||
wr.write_str("[ ");
|
wr.write_str(spaces(inner_indent));
|
||||||
|
|
||||||
// [ elem,
|
// [ elem,
|
||||||
// elem,
|
// elem,
|
||||||
// elem ]
|
// elem ]
|
||||||
let inner_indent = indent + 2;
|
|
||||||
let mut first = true;
|
let mut first = true;
|
||||||
for (*vv).each |item| {
|
for (*vv).each |item| {
|
||||||
if !first {
|
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) => {
|
Dict(dd) => {
|
||||||
|
if dd.size() == 0u {
|
||||||
|
wr.write_str(~"{}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let inner_indent = indent + 2;
|
||||||
|
|
||||||
// convert from a dictionary
|
// convert from a dictionary
|
||||||
let mut pairs = ~[];
|
let mut pairs = ~[];
|
||||||
for dd.each |key, value| {
|
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);
|
let sorted_pairs = sort::merge_sort(|a,b| *a <= *b, pairs);
|
||||||
|
|
||||||
// {
|
// {
|
||||||
wr.write_str(spaces(indent));
|
wr.write_str(~"{\n");
|
||||||
wr.write_str(~"{ ");
|
wr.write_str(spaces(inner_indent));
|
||||||
|
|
||||||
// { k: v,
|
// { k: v,
|
||||||
// k: v,
|
// k: v,
|
||||||
// k: v }
|
// k: v }
|
||||||
let inner_indent = indent + 2;
|
|
||||||
let mut first = true;
|
let mut first = true;
|
||||||
for sorted_pairs.each |kv| {
|
for sorted_pairs.each |kv| {
|
||||||
let (key, value) = kv;
|
let (key, value) = kv;
|
||||||
|
@ -150,13 +164,15 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) {
|
||||||
}
|
}
|
||||||
first = false;
|
first = false;
|
||||||
let key = str::append(escape_str(key), ~": ");
|
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);
|
wr.write_str(key);
|
||||||
to_writer_pretty(wr, value, key_indent);
|
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")
|
Null => wr.write_str(~"null")
|
||||||
}
|
}
|
||||||
|
@ -892,6 +908,12 @@ mod tests {
|
||||||
assert from_str(~" \"foo\" ") == Ok(String(@~"foo"));
|
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]
|
#[test]
|
||||||
fn test_read_list() {
|
fn test_read_list() {
|
||||||
assert from_str(~"[") ==
|
assert from_str(~"[") ==
|
||||||
|
|
Loading…
Reference in a new issue