0

我有一些来自我想输入的外部 API 的 json。数据的形状如下:

{
 "summary": {
    "field1": "foo",
    "field2": "bar",
  },
 "0": {
   "fieldA": "123",
   "fieldB": "foobar"
 },
 "1": {
   "fieldA": "245",
   "fieldB": "foobar"
 },
 ...
}

根据运行的查询,在汇总字段下方返回未知数量的索引对象。这些对象具有相同的形状,但与“摘要”对象的形状不同。我想使用 serde_json 将此响应键入如下:

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SearchResults {
    pub summary: Summary,
    pub results: Vec<IndexedFieldType>
}

是否可以使用 serde 宏来做到这一点?是否有一个“所有其他领域”我可以扁平化为 vec 的包罗万象?

4

1 回答 1

0

我最终像这样手动执行此操作:

let summary = &json.search_results["summary"];
let summary: Summary = serde_json::from_value(summary.to_owned()).unwrap();
let results: Vec<SearchResult> = json
        .search_results
        .as_object()
        .unwrap()
        .iter()
        .filter(|(key, _val)| key.parse::<i32>().is_ok())
        .map(|(_key, value)| serde_json::from_value(value.to_owned()).unwrap())
        .collect();
        
Ok(SearchResults {
            summary,
            results
        })
于 2021-12-23T00:10:43.747 回答