Is there a way to check what delete has done?
gkorland opened this issue · comments
Guy Korland commented
Is there a way to get how many Values where deleted? or know if delete succeeded to delete?
Changseok Han commented
This is not possible with SelectorMut
. If necessary, you can implement as follows. and i am still thinking whether to support the built-in count-aware delete
function or not.
extern crate jsonpath_lib as jsonpath;
extern crate serde;
extern crate serde_json;
fn delete(json: serde_json::Value, path: &str) -> Result<(usize, Option<serde_json::Value>), jsonpath::JsonPathError> {
let mut count = 0;
let mut selector = jsonpath::SelectorMut::default();
let ret = selector
.value(json)
.str_path(path)?
.replace_with(&mut |_| {
count = count + 1;
serde_json::Value::Null
})?
.take();
Ok((count, ret))
}
fn main() -> Result<(), jsonpath::JsonPathError> {
let json = serde_json::from_str(r#"
{
"a": {
"b": 2
}
}
"#).unwrap();
let (count, ret) = delete(json, "$.a.b")?;
println!("{}, {:?}", count, ret);
Ok(())
}
Guy Korland commented
thanks that is how we ended up implementing it :)
https://github.com/RedisLabsModules/RedisDoc/blob/4dc407d4682ce4b5569342c7136e7cffec68c153/src/redisjson.rs#L70