sách gpt4 ai đã đi

Giải mã JSON có điều kiện dựa trên các trường trong JSON

In lại 作者:行者123 更新时间:2023-11-29 07:47:55 27 4
mua khóa gpt4 Nike

我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段 kiểu 说明它是哪种类型。

我的方法是使用serde .我为每种响应类型创建一个结构并使它们可解码。一旦我有了这个,我该如何选择应该将哪个结构用于新收到的消息?

目前,我创建了另一个结构 TypeStruct,其中只有一个字段用于 kiểu。我将 JSON 解码为 TypeStruct,然后根据类型值为接收到的消息选择合适的结构,然后再次解码消息。

我想摆脱这种解码重复。

1 Câu trả lời

您可以使用现有的枚举反序列化。我将逐步举例说明将您的格式反序列化为以下枚举:

#[derive(Debug, PartialEq, Eq, Deserialize)]
enum MyType {
A {gar: ()},
B {test: i32},
C {blub: String},
}
  1. 从一个示例 json 字符串开始:

    let json = r#"{"type": "B", "test": 42}"#;
  2. 把它变成一个Value枚举

    let mut json: serde_json::Value = serde_json::from_str(json).unwrap();
  3. xóa bỏ类型字段

    let type_ = {
    let obj = json.as_object_mut().expect("object");
    let type_ = obj.remove("type").expect("`type` field");
    if let serde_json::Value::String(s) = type_ {
    S
    } khác {
    panic!("type field not a string");
    }
    };
  4. 创建“正确的”枚举 json。具有单个字段的结构,其中字段的名称是枚举变体,字段的值是变体值

    let mut enum_obj = std::collections::BTreeMap::new();
    enum_obj.insert(type_, json);
    let json = serde_json::Value::Object(enum_obj);
  5. 使用生成的 json 反序列化器将 json 转换为您的枚举值

    let obj: MyType = serde_json::from_value(json).unwrap();

关于json - 根据 JSON 中的字段有条件地解码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33323891/

27 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com