如何在rust中将字符串转换为有效的json

7rtdyuoh  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(620)

我是非常新的 rust 与javaScript的背景,我不能通过一个愚蠢的问题,这是 “如何JSON.parse在 rust ?"
我有一个&str类型的字符串"{\"first\":\"one\",\"second\":\"two\"}",我想要一个对象{first:"one",second:"two"}
我谷歌了多个链接,仍然停留在这一点上。
尝试过的方法-

  1. let mut object: Value = serde_json::from_str(abc).unwrap();
    错误-不满足特性界限api::Value: Deserialize<'_>
    1.通过Some(string.as_deref())将其转换为字符串和选项
  2. (Rust- JSON) How to convert &str to JSON response in rust?
  3. https://users.rust-lang.org/t/how-to-convert-a-string-type-to-a-json-object/72142
blmhpbnm

blmhpbnm1#

解析JSON字符串的方法有很多,但通常确实涉及到serdeserde_json
如果只需要一个简单的serde_json::Value对象,可以使用以下方法:

fn main() {
    let json_str = r#"{"first":"one","second":"two"}"#;
    let json_val: serde_json::Value = serde_json::from_str(json_str).unwrap();

    println!("{:#?}", json_val);
}
Object {
    "first": String("one"),
    "second": String("two"),
}

如果需要更复杂的结构,比如实际包含firstsecond成员的结构,可以将其解析为serde派生结构:
一个二个一个一个
如果你根本不需要struct或者Value,而是需要一个简单的HashMap<String, String>,那么就这样做:

use std::collections::HashMap;

fn main() {
    let json_str = r#"{"first":"one","second":"two"}"#;
    let my_dict: HashMap<String, String> = serde_json::from_str(json_str).unwrap();

    println!("{:#?}", my_dict);
}
{
    "first": "one",
    "second": "two",
}

serde_json::from_str的可能性是无穷无尽的,只要弄清楚你想用数据执行什么任务,然后选择合适的数据类型;)

相关问题