【问题标题】:serde_json flattening object with indices as keys以索引为键的 serde_json 展平对象
【发布时间】:2021-12-22 22:49:29
【问题描述】:

我有一些来自我想输入的外部 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?

【问题讨论】:

    标签: rust serde serde-json


    【解决方案1】:

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

    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
            })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2014-01-05
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多