Skip to content

Instantly share code, notes, and snippets.

@maxnachlinger
Last active August 15, 2020 17:51
Show Gist options
  • Save maxnachlinger/cc8cbc2b35a83c70ddd064f193a1eca0 to your computer and use it in GitHub Desktop.
Save maxnachlinger/cc8cbc2b35a83c70ddd064f193a1eca0 to your computer and use it in GitHub Desktop.
use serde_json::Value;
fn redact_props_strings(keys_to_redact: &Vec<String>, value: &mut Value, clear: bool) {
match value {
Value::Object(map) => {
for (k, v) in map {
redact_props_strings(&keys_to_redact, v, keys_to_redact.contains(&k));
}
}
Value::Array(array) => {
for (_, v) in array.iter_mut().enumerate() {
redact_props_strings(&keys_to_redact, v, false);
}
}
Value::String(s) => {
if clear {
s.clear();
}
}
_ => (),
}
}
fn main() {
let keys_to_redact: Vec<String> = vec!["prop2".to_string(), "prop4".to_string()];
let test0 = r#"{
"prop0": {
"prop1": {
"prop2": "redact me",
"prop3": "leave me"
}
},
"prop4": "redact me"
}"#;
let mut value0: Value = serde_json::from_str(&test0).expect("error");
redact_props_strings(&keys_to_redact, &mut value0, false);
println!("{}", serde_json::to_string_pretty(&value0).unwrap());
let test1 = r#"{
"prop0": {
"prop1": [{
"prop2": "redact me",
"prop3": "leave me"
}, {
"prop2": "redact me",
"prop5": "leave me"
}]
},
"prop4": "redact me"
}"#;
let mut value1: Value = serde_json::from_str(&test1).expect("error");
redact_props_strings(&keys_to_redact, &mut value1, false);
println!("{}", serde_json::to_string_pretty(&value1).unwrap());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment