gpt4 book ai didi

rust - 更改JSON结构而无需重新编译时,如何动态定义serde_json的结构?

转载 作者:行者123 更新时间:2023-12-03 11:44:15 32 4
gpt4 key购买 nike

例如,我们添加了一个在* .rs脚本中使用的结构

#[derive(Serialize, Deserialize, Debug)]
struct Foo {
Output: OUTPUT,
input: INPUT,
logs: LOGS,
}

#[derive(Serialize, Deserialize, Debug)]
struct OUTPUT {
width: u32,
samplerate: u32,
}

#[derive(Serialize, Deserialize, Debug)]
struct INPUT {
fileinputuri: String,
}

#[derive(Serialize, Deserialize, Debug)]
struct LOGS {
statuslog: String,
}
这是引用
let var: Foo = serde_json::from_str(&contents).expect("error while reading json");
当我在JSON中将字段 width: u32,更改为 n_width: u32,时,我们将结构更改为
#[derive(Serialize, Deserialize, Debug)]
struct OUTPUT {
n_width: u32,
samplerate: u32,
}
可以将结构提取到配置文件中并在函数调用时进行更新和加载,而不是将其添加到* .rs文件并进行每次更新?
从* .rs文件中分离结构是否对安全性或性能有影响?
是否有一种更好的匿名/未命名方式,可以在不更新结构的情况下对JSON进行更改?
根据下面的评论,可以选择使用 serde_json::Value,但这是否可以代替强类型结构使用安全方法?我担心内存安全性和安全性会受到恶意用户操纵,而该恶意用户无法访问JSON文件。
pub enum Value {
Null,
Bool(bool),
Number(Number),
String(String),
Array(Vec<Value>),
Object(Map<String, Value>),
}
假定在此程序中无需进一步引用 n_width字段,因此无需由Rust开发团队打开代码,只需JSON团队即可对JSON文件和struct文件进行更改。

最佳答案

如果要动态定义数据验证,则应考虑使用JSON Schema之类的东西。
如果您需要混合使用动态字段和静态字段,则可以将其与 serde(flatten) 一起使用(如Shepmaster的答案中指出的那样)。

关于rust - 更改JSON结构而无需重新编译时,如何动态定义serde_json的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65219278/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com