gpt4 book ai didi

json - 不序列化简单修改JSON对象得到 "cannot borrow immutable borrowed content as mutable"

转载 作者:行者123 更新时间:2023-11-29 08:33:42 25 4
gpt4 key购买 nike

我在 Rust 1.6.0 中有一个 JSON 编码的对象。我想从 JSON 解码它,更改一个键的值,然后再次将其转换回 JSON 编码的字符串。我不想编写结构来保存数据。

我正在使用 rustc_serialize,它似乎主要是围绕序列化结构构建并自动执行的,但我只想要一个简单的 JSON 修改。

json_contents 是一个 String,它具有原始的编码 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 库吗?

最佳答案

一些调试已经为我解决了这个问题:

我替换了这段代码:

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();

一切都已编译并运行(到目前为止)

关于json - 不序列化简单修改JSON对象得到 "cannot borrow immutable borrowed content as mutable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35720833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com