例如,我们添加一个在 *.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");
当我将字段更改width: u32,
为n_width: u32,
JSON 时,我们会将结构更改为
#[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文件进行修改即可。