2015-07-22 2 views
2

Итак, скажем, я хочу заменить {"foo": 13} на {"foo": 14}. Попытка:Чтение, затем изменение JSON с помощью rustc_serialize

extern crate rustc_serialize; 
use rustc_serialize::json::Json; 

fn main() { 
    let data = Json::from_str("{\"foo\": 13, \"bar\": \"baz\"}").unwrap(); 
    let mut obj = data.as_object().unwrap(); 
    let somenum: u64 = 14; 
    obj.insert(String::from_str("foo"), Json::U64(somenum)); 

    for (key, value) in obj.iter() { 
     println!("{}: {}", key, match *value { 
      Json::U64(v) => format!("{} (u64)", v), 
      Json::String(ref v) => format!("{} (string)", v), 
      _ => format!("other") 
     }); 
    } 
} 

Ошибка:

src/main.rs:8:5: 8:8 error: cannot borrow immutable borrowed content `*obj` \ 
          as mutable 
src/main.rs:8  obj.insert(String::from_str("foo"), Json::U64(somenum)); 
        ^~~ 

ответ

3

as_object возвращает Option<&Object> -an неизменная ссылка.

Чтобы получить изменяемую ссылку (Option<&mut Object>), вы должны использовать as_object_mut.

Смежные вопросы