如何在Rust中将&str转换为JSON响应?

4

你好,我有一个 &str 类型的变量。如何将其转换为 JSON 格式?例如,我有一个 &str:

{"index":0,"name":"AB/CDE/FG/402/test_int4","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}

我该如何将其转换为JSON
{
"index": 0,
"name": "AB/CDE/FG/402/test_int4",
"sts": "on",
"time": "2021-06-05 03:28:24.044284300 UTC",
"value": 8 
}

是否有类似于Python中的json.loads()方法可用,或者在Rust中可以做类似的等价操作?

2个回答

9

这里有一个误解。JSON是一种序列化格式,它总是一个字符串。您的两个块都是 JSON,并且在功能上相同。json.loads() 是将其反序列化为本地可以访问和操作的值。

如果您想要这个JSON通用使用,您可能需要使用 serde_json::Value

use serde_json::Value;

fn main() {
    let input = r#"{"index":0,"name":"AB/CDE/FG/402/test_int4","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}"#;
    let mut object: Value = serde_json::from_str(input).unwrap();
    
    if let Some(name) = object.get_mut("name") {
        *name = "new name".into();
    }
    
    println!("{}", object);
}

{"index":0,"name":"new name","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}

Playground

或者,通常会创建一个反映 JSON 预期结构的结构,并通过 serde 反序列化为该类型:

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
struct Data {
    index: i32,
    name: String,
    sts: String,
    time: String,
    value: i32
}

fn main() {
    let input = r#"{"index":0,"name":"AB/CDE/FG/402/test_int4","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}"#;
    let mut object: Data = serde_json::from_str(input).unwrap();
    
    object.name = "new name".to_string();
    
    println!("{:#?}", object);
}

Data {
    index: 0,
    name: "new name",
    sts: "on",
    time: "2021-06-05 03:28:24.044284300 UTC",
    value: 8,
}

沙盒


1

我不知道有没有内置的功能,但是这个软件包可以实现:

use tinyjson::{JsonParseError, JsonValue};

fn main() -> Result<(), JsonParseError> {
   let s = r#"
{
   "index":0,
   "name":"AB/CDE/FG/402/test_int4",
   "sts":"on",
   "time":"2021-06-05 03:28:24.044284300 UTC",
   "value":8
}
"#;
   let m: JsonValue = s.parse()?;
   println!("{:?}", m);
   Ok(())
}

结果:

Object({
   "value": Number(8.0),
   "index": Number(0.0),
   "name": String("AB/CDE/FG/402/test_int4"),
   "time": String("2021-06-05 03:28:24.044284300 UTC"),
   "sts": String("on")
})

https://docs.rs/tinyjson


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接