Skip to content

Commit d3b7d95

Browse files
authored
Merge pull request #259 from 01mf02/obj-key-fmt
Correct printing of special Unicode characters in objects keys.
2 parents 419a76c + 6b960f7 commit d3b7d95

File tree

4 files changed

+14
-9
lines changed

4 files changed

+14
-9
lines changed

jaq-json/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -945,11 +945,11 @@ impl fmt::Display for Val {
945945
}
946946
Self::Obj(o) => {
947947
write!(f, "{{")?;
948-
let mut iter = o.iter();
948+
let mut iter = o.iter().map(|(k, v)| (Val::Str(k.clone()), v));
949949
if let Some((k, v)) = iter.next() {
950-
write!(f, "{k:?}:{v}")?;
950+
write!(f, "{k}:{v}")?;
951951
}
952-
iter.try_for_each(|(k, v)| write!(f, ",{k:?}:{v}"))?;
952+
iter.try_for_each(|(k, v)| write!(f, ",{k}:{v}"))?;
953953
write!(f, "}}")
954954
}
955955
}

jaq-play/src/lib.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,15 @@ where
5858
}
5959

6060
fn fmt_val(f: &mut Formatter, opts: &PpOpts, level: usize, v: &Val) -> fmt::Result {
61+
let display = |s| FormatterFn(move |f: &mut Formatter| fmt_str(f, &escape(s)));
6162
match v {
6263
Val::Null => span(f, "null", "null"),
6364
Val::Bool(b) => span(f, "boolean", b),
6465
Val::Int(i) => span(f, "number", i),
6566
Val::Float(x) if x.is_finite() => span_dbg(f, "number", x),
6667
Val::Float(_) => span(f, "null", "null"),
6768
Val::Num(n) => span(f, "number", n),
68-
Val::Str(s) => {
69-
let display = FormatterFn(|f: &mut Formatter| fmt_str(f, &escape(s)));
70-
span(f, "string", display)
71-
}
69+
Val::Str(s) => span(f, "string", display(s)),
7270
Val::Arr(a) if a.is_empty() => write!(f, "[]"),
7371
Val::Arr(a) => {
7472
write!(f, "[")?;
@@ -79,7 +77,7 @@ fn fmt_val(f: &mut Formatter, opts: &PpOpts, level: usize, v: &Val) -> fmt::Resu
7977
Val::Obj(o) => {
8078
write!(f, "{{")?;
8179
fmt_seq(f, opts, level, &**o, |f, (k, val)| {
82-
span_dbg(f, "key", escape(k))?;
80+
span(f, "key", display(k))?;
8381
write!(f, ":")?;
8482
if !opts.compact {
8583
write!(f, " ")?;

jaq/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ fn fmt_val(f: &mut Formatter, opts: &PpOpts, level: usize, v: &Val) -> fmt::Resu
469469
Val::Obj(o) => {
470470
'{'.bold().fmt(f)?;
471471
let kv = |f: &mut Formatter, (k, val): (&std::rc::Rc<String>, &Val)| {
472-
write!(f, "{:?}:", k.bold())?;
472+
write!(f, "{}:", Val::Str(k.clone()).bold())?;
473473
if !opts.compact {
474474
write!(f, " ")?;
475475
}

jaq/tests/golden.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ test!(
142142
r#""\u0000​\r\t\n asdf""#
143143
);
144144

145+
test!(
146+
fmt_obj_key,
147+
&["-c"],
148+
r#"{"विश\u094dव": 1}"#,
149+
r#"{"विश्व":1}"#
150+
);
151+
145152
test!(
146153
mods,
147154
&["-c", "-L", "tests", r#"include "a"; [a, data, d]"#],

0 commit comments

Comments
 (0)