我无法从 JSON 中提取值,其中字符串在 json_serde 中没有双引号。 Json_serde::Value 在 json_serde::from_str() 中失败
use serde_json::{Result, Value};
fn main() -> Result<()>{
let raw_text = r##"{
"url" : https://www.google.com
}"##;
println!("{}",raw_text);
let v: Value = serde_json::from_str(raw_text)?;
//let detail: Value = serde_json:: from_str(&v["detail"].to_string())?;
println!("{}", v["url"]);
Ok(())
}
输出
json git:master ❯❯❯ cargo run ✭
Compiling json v0.1.0 (/home/d/Documents/RustScripts/json)
Finished dev [unoptimized + debuginfo] target(s) in 0.21s
Running `target/debug/json`
{
"url" : https://www.google.com
}
Error: Error("expected value", line: 2, column: 19)
最佳答案
数据不是 JSON 格式,因此 serde_json
无法对其进行反序列化。由于 YAML 是 JSON 的超集,并且接受不带双引号的字符串,因此您可以针对此特定情况使用 serde_yaml
:
use serde_json::Value;
use serde_yaml::Result;
fn main() -> Result<()>{
let raw_text = r##"{
"url" : https://www.google.com
}"##;
let v: Value = serde_yaml::from_str(raw_text)?;
println!("{}", v["url"]);
Ok(())
}
如果字符串可能被解释为不同的类型(例如 yes
为 bool 值),则可能会导致问题。但如果不带引号的字符串都是 URL,那么它应该可以工作。
更好的解决方案是修复生成此近乎 JSON 数据的系统。
关于json - 是否可以使用 json 的 json_serde::from_str() 获取值,其中字符串周围没有“”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72581178/