在Rust中连接/合并两个修饰过的json字符串

uqzxnwby  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(200)

我有两个字符串是从serde派生的,它们来自两个不同的源
JSON字符串1

let a: String = 
"
{
  "A": 100
}
";

JSON字符串2

let b: String =
"
{
  "B": "aA"
}
";

我想把这两个字符串连接成一个单独的json修饰字符串new_string,它可以显示如下:-

println!("{}", new_string)
Result:- 
{
  "A": 100,
  "B": "aA"
}

我试着用矢量连接它们,但是每次打印它们时,我都得到了换行符,这是我想避免的。在Rust中使用serde有可能吗?

oxcyiej7

oxcyiej71#

在当前的字符串形式中,很难正确地合并任意JSON值。
相反,您需要将这些字符串反序列化为可使用的值,合并它们,然后将最终值序列化回字符串:

use serde_json::Value;
use std::collections::HashMap;

fn main() {
    let a = r#"
{
  "A": 100
}
"#;

    let b = r#"
{
  "B": "aA"
}
"#;

    let mut data_a: HashMap<String, Value> = serde_json::from_str(a).unwrap();
    let mut data_b: HashMap<String, Value> = serde_json::from_str(b).unwrap();

    data_a.extend(data_b);

    let result = serde_json::to_string_pretty(&data_a).unwrap();
    println!("{}", result);
}

理想情况下,您甚至不会在第一时间将值序列化为字符串,无论您从“两个不同的源”获得什么值,都可能直接合并,或者序列化为您可以使用的serde_json::Value

相关问题