remove unmaintained json crate, do our own string escaping
This commit is contained in:
parent
feb5e4979b
commit
5999d54842
3 changed files with 20 additions and 11 deletions
|
|
@ -66,7 +66,7 @@ impl DataFormat for Csv {
|
|||
fn header(dataset: &DataSet) -> SerializationChunk {
|
||||
let mut header = String::from("Date");
|
||||
for column in dataset.columns.iter() {
|
||||
write!(&mut header, ",{}", column)?;
|
||||
write!(&mut header, r#","{}""#, column.replace('"', r#""""#))?;
|
||||
}
|
||||
writeln!(&mut header)?;
|
||||
Ok(header)
|
||||
|
|
@ -97,7 +97,7 @@ impl DataFormat for Json {
|
|||
fn header(dataset: &DataSet) -> SerializationChunk {
|
||||
let mut header = String::from(r#"{"columns":["Date""#);
|
||||
for column in dataset.columns.iter() {
|
||||
write!(&mut header, ",{}", json::stringify(column.as_str()))?;
|
||||
write!(&mut header, ",{}", escaped_json_string(column.as_str()))?;
|
||||
}
|
||||
write!(&mut header, r#"],"rows":["#)?;
|
||||
Ok(header)
|
||||
|
|
@ -115,7 +115,7 @@ impl DataFormat for Json {
|
|||
)?;
|
||||
for column in dataset.columns.iter() {
|
||||
if let Some(val) = datapoint.values.get(column) {
|
||||
write!(&mut row, ",{}:{}", json::stringify(column.as_str()), val)?;
|
||||
write!(&mut row, ",{}:{}", escaped_json_string(column.as_str()), val)?;
|
||||
}
|
||||
}
|
||||
row += "}";
|
||||
|
|
@ -125,3 +125,20 @@ impl DataFormat for Json {
|
|||
const ROW_SEPARATOR: &'static str = ",";
|
||||
const END: &'static str = "]}";
|
||||
}
|
||||
|
||||
fn escaped_json_string(s: &str) -> String {
|
||||
s.chars().fold(String::from(r#"""#), |mut acc, c| {
|
||||
match c {
|
||||
'"' => acc.push_str(r#"\""#),
|
||||
'\\' => acc.push_str(r"\\"),
|
||||
'\t' => acc.push_str(r"\t"),
|
||||
'\n' => acc.push_str(r"\n"),
|
||||
_ => if c.is_ascii_control() {
|
||||
acc.push_str(&format!(r"\u{:04X}", c as u32))
|
||||
} else {
|
||||
acc.push(c)
|
||||
}
|
||||
}
|
||||
acc
|
||||
}) + r#"""#
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue