2016-03-01 56 views
0

我有一個JSON編碼的對象在鏽1.6.0。我想從JSON解碼它,更改一個鍵的值,並再次將其轉換回JSON編碼的字符串。我不想寫一個結構來保存數據。簡單修改的​​JSON對象沒有序列化得到「不能借用不可變的借來的內容作爲可變」

我正在使用的rustc_serialize,它似乎主要是圍繞序列化結構和自動做到這一點,但我只是想要一個簡單的JSON修改。

json_contentsString,它具有原始的編碼JSON對象。

let new_value = json::Json::from_str(&format!("[\"http://localhost:{}\"]", port)).unwrap(); 

let mut myjson_0 = json::Json::from_str(&json_contents).unwrap(); 
let mut myjson = tilejson_0.as_object().unwrap(); 
myjson.insert("mykey".to_owned(), new_value); 
let new_json: String = json::encode(&myjson).unwrap(); 

不過,我得到以下錯誤:

src/main.rs:53:5: 53:13 error: cannot borrow immutable borrowed content `*myjson` as mutable 
src/main.rs:53  myjson.insert("mykey".to_owned(), new_value); 
        ^~~~~~ 
error: aborting due to previous error 

我怎麼編譯呢?有更好,更簡單的JSON Rust庫我可以使用嗎?

回答

0

一些調試已經修復了這個問題對我來說:

我更換驗證碼:

let mut myjson = tilejson_0.as_object().unwrap(); 

有了這個,以確保我有,我認爲我有型:

let mut myjson: BTreeMap<String, json::Json> = tilejson_0.as_object().unwrap(); 

我得到了這個編譯器錯誤:

src/main.rs:52:54: 52:85 error: mismatched types: 
expected `collections::btree::map::BTreeMap<collections::string::String, rustc_serialize::json::Json>`, 
    found `&collections::btree::map::BTreeMap<collections::string::String, rustc_serialize::json::Json>` 
(expected struct `collections::btree::map::BTreeMap`, 
    found &-ptr) [E0308] 
src/main.rs:52  let mut myjson: BTreeMap<String, json::Json> tilejson_0.as_object().unwrap(); 

顯然我錯了。而不是擁有BTreeMap,我有一個參考,&BTreeMap

的解決方案是將該行更改爲這樣:

let mut myjson = tilejson_0.as_object().unwrap().to_owned(); 

而且一切編譯和工作(到目前爲止)

+4

你也可以用'as_object_mut'得到一個'&mut'如果你想修改原始的json對象。 –

相關問題