rust serde_yaml::Value ->serde_json::Value,`null` keys

fdx2calv  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(194)

我有一个很大的复杂的YAML文件,我成功地将其读入serde_yaml::Value,并需要将其作为JSON发送给用户(从Axum处理程序)。
但是在那个大YAML的深处有像null这样的键,而serde_json::json!会发出“key必须是字符串”的警告。
我知道这对YAML是有效的,但对JSON无效。
但是有没有什么变通的办法呢?我只需要像"null"这样的字符串键来代替那些空值。
JavaScript和Go YAML解析器的行为与此完全相同...
我为此写了一个很大的递归函数,它可以手动转换值,但也许这有点过头了。而且我的函数不知何故打破了YAML合并(<<),还不知道为什么。

czfnxgou

czfnxgou1#

你可以简单地将yaml反序列化为serde_json::Value,这样就可以保证它以后可以序列化为json:

fn main() {
    let yaml: serde_json::Value = serde_yaml::from_str(r#"null: "hello""#).unwrap();
    let json_str = serde_json::to_string(&yaml).unwrap();
    println!("{json_str}");
}

输出:

{"null":"hello"}

Playground

相关问题