Memory management 当使用将在函数末尾删除的字符串调用serde_json::from_str时,如何返回serde_json::from的结果?
我在函数中有一个新分配的Memory management 当使用将在函数末尾删除的字符串调用serde_json::from_str时,如何返回serde_json::from的结果?,memory-management,rust,lifetime,Memory Management,Rust,Lifetime,我在函数中有一个新分配的字符串,我需要创建一个派生对象,从该字符串借用&str,并返回给定的对象 我知道我的代码是错误的,因为String生命周期是函数的生命周期,因此派生对象将永远不会返回,因为存在悬空引用 这里的惯用解决方案是什么?我无法更改serde_json::from_str #[inline] pub fn get_object<'a, T>(json_data: &'a Value, path: &[&str]) -> Option<
字符串
,我需要创建一个派生对象,从该字符串
借用&str
,并返回给定的对象
我知道我的代码是错误的,因为String
生命周期是函数的生命周期,因此派生对象将永远不会返回,因为存在悬空引用
这里的惯用解决方案是什么?我无法更改serde_json::from_str
#[inline]
pub fn get_object<'a, T>(json_data: &'a Value, path: &[&str]) -> Option<T>
where T: serde::Deserialize<'a>
{
let mut pointer_str = String::new();
for entry in path.iter() {
pointer_str = format!("{}/{}", pointer_str, entry);
}
let child = json_data.pointer(&pointer_str).unwrap().to_string();
let result = serde_json::from_str(&child).ok();
return result;
}
惯用的解决方案是:
- 让
实现T
反序列化
- 有两种方法:一种用于创建字符串,另一种用于反序列化,并确保反序列化结果的存储时间长于
T