在进一步处理之前,我正在try 遍历一个JSON对象.以下代码:
use serde_json::{json, Map, Value, Result};
fn hex2value(_hex: &Value) -> Result<Value> {
Ok(Value::from("converted"))
}
fn walk_object(obj: &mut Map<String, Value>) -> Result<()> {
for (k, v) in obj.iter_mut() {
if v.is_object() {
walk_object(v.as_object_mut().unwrap())?
} else if v.is_string() {
obj[k] = hex2value(v)?
}
}
Ok(())
}
fn main() {
let mut data = json!({
"name": "John Doe",
"age": 43,
"phones": {
"home": "+44 1234567",
"work": "+44 2345678"
}
});
walk_object(&mut data.as_object().unwrap());
}
出现以下错误:
error[E0499]: cannot borrow `*obj` as mutable more than once at a time
--> src/main.rs:13:13
|
9 | for (k, v) in obj.iter_mut() {
| --------------
| |
| first mutable borrow occurs here
| first borrow later used here
...
13 | obj[k] = hex2value(v)?
| ^^^ second mutable borrow occurs here
如何更改代码以满足编译器的要求?