【问题标题】:(Rust- JSON) How to convert &str to JSON response in rust?(Rust- JSON) 如何在 rust 中将 &str 转换为 JSON 响应?
【发布时间】:2021-11-02 16:47:26
【问题描述】:

您好,我有一个 &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 中完成?

【问题讨论】:

    标签: json rust


    【解决方案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

    【讨论】:

      【解决方案2】:

      这里有一个误解。 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,
      }
      

      Playground

      【讨论】:

        猜你喜欢
        • 2013-03-01
        • 1970-01-01
        • 2021-02-27
        • 1970-01-01
        • 2022-12-12
        • 2017-05-01
        • 2018-06-10
        • 1970-01-01
        相关资源
        最近更新 更多