如何在 Rust 中将 vector 的字符串元素更改为 json?

How do I change the string element of vector to json in Rust?

["{\"from\":1,\"date\":1651619967}", 
"{\"from\":1,\"date\":1651619961}"]

我有这种载体。我想以 Json.

的形式打印出这个向量中的字符串元素
[{
"from":1,
"date":1651619967
}
, {
"from":1,
"date":1651619967
}]

我想把它改成像上面那样漂亮的Json形式。我怎样才能做到这一点?唯一的答案是使用 for 语句?我想知道如何有效地做到这一点。

    let values:Vec<String> = redis_conn
        .zrevrange(room_key, 0, -1)
        .expect("failed to execute ZREVRANGE for 'room_key'");

供参考,上面的vector是redis通过zrevrange得到的结果。

你的输入是一个 rust vec,包含 JSON 编码的字符串,如果我理解正确的话,你想获得整个东西的 pretty-printed 版本(包括包含 vec).

一种方法是使用serde_json解析字符串,然后是to_string_pretty方法获取漂亮的打印字符串:

use serde_json::{self, Value};

fn main() {
    let input = vec![
        "{\"from\":1,\"date\":1651619967}", 
        "{\"from\":1,\"date\":1651619961}"
    ];

    // Convert input into Vec<Value>, by parsing each string
    let elems = input.into_iter()
        .map(serde_json::from_str)
        .collect::<Result<Vec<Value>,_>>()
        .unwrap();
    
    let json_val = Value::Array(elems);

    println!("{}", serde_json::to_string_pretty(&json_val).unwrap());
}

Playground

输出:

[
  {
    "date": 1651619967,
    "from": 1
  },
  {
    "date": 1651619961,
    "from": 1
  }
]