fix issue #559: to json -r serializes datetime without spaces (#596)

* fix issue #559: to json -r serializes datetime without spaces

* add in a third test which checks spaces in both keys and values

* fix clippy error
This commit is contained in:
Michael Angerman 2021-12-27 02:51:38 -08:00 committed by GitHub
parent 3706bef0a1
commit f50f37c853
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 4 deletions

View file

@ -4,6 +4,7 @@
use std::fmt::{Display, LowerExp}; use std::fmt::{Display, LowerExp};
use std::io; use std::io;
use std::io::{BufRead, BufReader};
use std::num::FpCategory; use std::num::FpCategory;
use super::error::{Error, ErrorCode, Result}; use super::error::{Error, ErrorCode, Result};
@ -1032,7 +1033,20 @@ where
T: ser::Serialize, T: ser::Serialize,
{ {
let vec = to_vec(value)?; let vec = to_vec(value)?;
let mut string = String::from_utf8(vec)?; let string = remove_json_whitespace(vec);
string.retain(|c| !c.is_whitespace());
Ok(string) Ok(string)
} }
fn remove_json_whitespace(v: Vec<u8>) -> String {
let reader = BufReader::new(&v[..]);
let mut output = String::new();
for line in reader.lines() {
match line {
Ok(line) => output.push_str(line.trim().trim_end()),
_ => {
eprintln!("Error removing JSON whitespace");
}
}
}
output
}

View file

@ -15,9 +15,25 @@ fn from_json_2() -> TestResult {
} }
#[test] #[test]
fn to_json_raw_flag() -> TestResult { fn to_json_raw_flag_1() -> TestResult {
run_test( run_test(
"[[a b]; [jim susie] [3 4]] | to json -r", "[[a b]; [jim susie] [3 4]] | to json -r",
r#"[{"a": "jim","b": "susie"},{"a": 3,"b": 4}]"#, r#"[{"a": "jim","b": "susie"},{"a": 3,"b": 4}]"#,
) )
} }
#[test]
fn to_json_raw_flag_2() -> TestResult {
run_test(
"[[\"a b\" c]; [jim susie] [3 4]] | to json -r",
r#"[{"a b": "jim","c": "susie"},{"a b": 3,"c": 4}]"#,
)
}
#[test]
fn to_json_raw_flag_3() -> TestResult {
run_test(
"[[\"a b\" \"c d\"]; [\"jim smith\" \"susie roberts\"] [3 4]] | to json -r",
r#"[{"a b": "jim smith","c d": "susie roberts"},{"a b": 3,"c d": 4}]"#,
)
}