如何用Rust关键字属性名解码JSON对象?

trnvg8h3  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(188)

我想知道是否可以在Rust中解码一个JSON对象,它的属性名称也是一个Rust关键字。我正在使用rustc-serialize crate,我的结构体定义如下所示:


# [derive(RustcDecodable)]

struct MyObj {
  type: String
}

编译器会掷回错误,因为type是保留字:

error: expected identifier, found keyword `type`
src/mysrc.rs:23     type: String,
                           ^~~~
nfeuvbwi

nfeuvbwi1#

您可以使用serde机箱。它支持对字段since February 2015进行重命名
您的示例可能如下所示:


# [derive(Deserialize)]

struct MyObj {
    #[serde(rename = "type")] 
    type_name: String
}
tf7tbtn2

tf7tbtn22#

这可以通过使用raw identifiers来完成,而不需要serde的字段重命名。通过在标识符前面添加r#,可以使用关键字名称。
使用rustc-serialize


# [derive(RustcDecodable)]

struct MyObj {
    r#type: String
}

使用serde

use serde::Deserialize;

# [derive(Deserialize)]

struct MyObj {
    r#type: String
}

请注意,不建议使用rustc-serialize,而建议使用serde

相关问题