如何修改serde_json::Value::string中的字符串?

如何修改serde_json::Value::string中的字符串?,json,rust,serde,serde-json,Json,Rust,Serde,Serde Json,我有一个包含要修改的字符串的文件,如果可能的话,不需要克隆该字符串。我想你会这样做: let mut value = Value::String("Hello world".to_string()); let mut string = value.as_mut_string().unwrap(); string.push('!'); 但是没有像字符串那样的东西。我可以这样做: let mut value = Value::String("Hello world&q

我有一个包含要修改的字符串的文件,如果可能的话,不需要克隆该字符串。我想你会这样做:

let mut value = Value::String("Hello world".to_string());
let mut string = value.as_mut_string().unwrap();
string.push('!');
但是没有像字符串那样的东西。我可以这样做:

let mut value = Value::String("Hello world".to_string());
let mut string = value.as_str().unwrap().to_string();
string.push('!');
value = Value::String(string);

然而,这是既丑陋的代码,又低效,因为我必须克隆字符串。有更好的解决方案吗?

serde_json::value::value
是一个
enum
,您可以通过模式匹配它:

let mut value = Value::String("Hello world".to_string());
if let Value::String(string) = &mut value {
    string.push('!');
}

println!("{:?}", value);
()