【发布时间】:2022-01-19 17:42:58
【问题描述】:
我正在尝试将嵌套的 json 序列化为 BTree
JSON
{
"data": "some_data",
"key": "some_key",
"nestedValue": {
"timestamp": "0",
"d1": "d1",
"d2": "d2",
"time": 0,
"secindaryNestedValue": [{
"d3": "test1",
"d4": "test2"
},
{
"d3": "test3",
"d4": "test4"
}
]
},
"timestamp": 0
}
我正在尝试将其序列化如下:
let input: BTreeMap<String, String> = serde_json::from_str(INPUT).unwrap();
println!("input -> {:?}",input);
我想得到如下输出:
BTree 项目
Key Value
data some_data
key some_key
nested_value "{\"d1\":\"d1\",\"d2\":\"d2\",\"time\":0,\"secindaryNestedValue\":[{\"d3\":\"test1\",\"d4\":\"test2\"},{\"d3\":\"test3\",\"d4\":\"test4\"}]}"
timestamp 0
我这样做是为了让我的嵌套 json 尽可能通用。
在随后的操作中,我将使用 serde 将嵌套的 json 绑定到一个结构,如下所示:
use serde_derive::Deserialize;
use serde_derive::Serialize;
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Root {
pub data: String,
pub key: String,
pub nested_value: NestedValue,
pub timestamp: i64,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NestedValue {
pub timestamp: String,
pub d1: String,
pub d2: String,
pub time: i64,
pub secindary_nested_value: Vec<SecindaryNestedValue>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SecindaryNestedValue {
pub d3: String,
pub d4: String,
}
我想稍后使用嵌套值, 将 json 字符串转换为 json 并绑定到类似的结构体上。
对不使用 BTree 和更好的东西的建议持开放态度,但我的用例要求我将内部嵌套的 json 作为字符串,以后可以绑定。
【问题讨论】:
-
你在找
serde_json::value::RawValue吗?
标签: json parsing rust hashmap serde