您可以将 serde_json 名称映射到不同的结构值吗?

Tes*_*est 1 rust serde serde-json

在 serde_json 库中,是否可以解析 json 并将一个属性名称映射到 Rust 中的另一个属性名称struct

例如,解析这个json:

{
    "json_name": 3
}
Run Code Online (Sandbox Code Playgroud)

进入这个结构:

StructName { struct_name: 3 }
Run Code Online (Sandbox Code Playgroud)

请注意,“json_name”和“struct_name”是不同的。

Jer*_*ows 6

您可以使用字段属性来告诉 serde 您想要使用与 Rust 中字段名称不同的名称。这告诉 serde json 字段data应该写入结构体的new_data字段:

use serde::Deserialize;
use serde_json;

static JSON: &'static str = r#"{ "data": 4 }"#;

#[derive(Deserialize)]
struct Foo {
    data: u8,
}

#[derive(Deserialize)]
struct Bar {
    #[serde(rename = "data")]
    new_data: u8,
}

fn main() {
    let foo: Foo = serde_json::from_str(JSON).unwrap();
    let bar: Bar = serde_json::from_str(JSON).unwrap();

    assert_eq!(foo.data, bar.new_data);
}
Run Code Online (Sandbox Code Playgroud)

注意:您将需要deriveserde 的 crate 功能(serde = { version = "1.0", features = ["derive"] }in Cargo.toml),并确保与 JSON 数据一起使用的结构具有适当的派生宏。