我有一个&str:
{"index":0,"name":"AB/CDE/FG/402/test_int4","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}
Run Code Online (Sandbox Code Playgroud)
我怎样才能将它转换为 JSON?
{
"index": 0,
"name": "AB/CDE/FG/402/test_int4",
"sts": "on",
"time": "2021-06-05 03:28:24.044284300 UTC",
"value": 8
}
Run Code Online (Sandbox Code Playgroud)
有没有类似 Python 的json.loads()方法可用或者可以在 Rust 中完成类似的操作?
这里有一个误解。JSON 是一种序列化格式,它始终是一个字符串。您的两个块都是 JSON 并且功能相同。什么json.loads()是反序列化成一个值可以本机访问和操作的
serde_json::Value如果您希望通用地使用此 JSON,您可能需要使用 a 。
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);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
或者,通常创建一个反映 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);
}
Run Code Online (Sandbox Code Playgroud)
{"index":0,"name":"new name","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}
Run Code Online (Sandbox Code Playgroud)