反序列化 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 将为 RcArc 实现 SerializeDeserialize。然后,您可以在 ArrayRcDataRc 结构上导出这两个特征。

对于反序列化,它会为反序列化的每个值创建一个新的 Rc,强计数为 1,这听起来像您想要的。