json - 是否可以使用 json 的 json_serde::from_str() 获取值,其中字符串周围没有“”?

标签 json rust serde

我无法从 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/

相关文章:

java - Spring MVC 将请求从 Cp1252 编码为 UTF-8

rust - 如何在不移动自身的情况下消除混合 Iterator 和 Futures 调用链的歧义?

rust - 将 TOML 反序列化为具有值的枚举向量

rust - 如何通过添加附加字段来改变 serde_json 值?

python - 从 Spark 数据帧中提取 Json 数据

javascript - 使用 Grunt 从单个 Jade 模板创建多个 HTML 文件

java - Libgdx scene2d uiskin.json com.badlogic.gdx.utils.GdxRuntimeException

rust - 如何建立一个可变的Vecs池,以便在Drop上重复使用?

closures - 为什么函数参数的生存期与函数内绑定(bind)的生存期不同?

rust - 函数返回 serde 反序列化类型时如何修复生命周期错误?