反序列化 JSON 并将叶数据放入 Rc 结构的最佳方法是什么?
What is the best way to deserialize JSON and put the leaf data into Rc structs?
我有一个 JSON 文件,其中包含一些重复的对象结构和字符串,如下所示。
{
"array": [
{
"data": [
"blih",
"blah",
"bloh"
]
},
...
]
}
我对 Rust 的最佳理解是将 JSON 反序列化为一组结构,然后将数据复制到另一组结构中,其中包括 Rc
:
// json structs
#[derive(Serialize, Deserialize)]
struct ArrayJson {
array: Vec<DataJson>,
}
#[derive(Serialize, Deserialize)]
struct DataJson {
data: Vec<String>,
}
// rc structs
struct ArrayRc {
array: Vec<DataRc>,
}
struct DataRc {
data: Vec<Rc<String>>,
}
有什么方法可以不创建两组结构,而只创建一组?
更新: 我相信 serde 的 rc
不是我想要的,因为它序列化和反序列化实际的 Rc
Arc
结构.
Serializing a data structure containing reference-counted pointers
will serialize a copy of the inner value of the pointer each time a
pointer is referenced within the data structure. Serialization will
not attempt to deduplicate these repeated data.
Deserializing a data structure containing reference-counted pointers
will not attempt to deduplicate references to the same data. Every
deserialized pointer will end up with a strong count of 1.
我只关心 Rust 方面的 Rc
结构,因此我认为我需要两个结构。
启用 serde crate 的 rc
功能,serde 将为 Rc
和 Arc
实现 Serialize
和 Deserialize
。然后,您可以在 ArrayRc
和 DataRc
结构上导出这两个特征。
对于反序列化,它会为反序列化的每个值创建一个新的 Rc
,强计数为 1,这听起来像您想要的。
我有一个 JSON 文件,其中包含一些重复的对象结构和字符串,如下所示。
{
"array": [
{
"data": [
"blih",
"blah",
"bloh"
]
},
...
]
}
我对 Rust 的最佳理解是将 JSON 反序列化为一组结构,然后将数据复制到另一组结构中,其中包括 Rc
:
// json structs
#[derive(Serialize, Deserialize)]
struct ArrayJson {
array: Vec<DataJson>,
}
#[derive(Serialize, Deserialize)]
struct DataJson {
data: Vec<String>,
}
// rc structs
struct ArrayRc {
array: Vec<DataRc>,
}
struct DataRc {
data: Vec<Rc<String>>,
}
有什么方法可以不创建两组结构,而只创建一组?
更新: 我相信 serde 的 rc
不是我想要的,因为它序列化和反序列化实际的 Rc
Arc
结构.
Serializing a data structure containing reference-counted pointers will serialize a copy of the inner value of the pointer each time a pointer is referenced within the data structure. Serialization will not attempt to deduplicate these repeated data.
Deserializing a data structure containing reference-counted pointers will not attempt to deduplicate references to the same data. Every deserialized pointer will end up with a strong count of 1.
我只关心 Rust 方面的 Rc
结构,因此我认为我需要两个结构。
启用 serde crate 的 rc
功能,serde 将为 Rc
和 Arc
实现 Serialize
和 Deserialize
。然后,您可以在 ArrayRc
和 DataRc
结构上导出这两个特征。
对于反序列化,它会为反序列化的每个值创建一个新的 Rc
,强计数为 1,这听起来像您想要的。