You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

serde_json::from_str能否解析字符串无双引号的JSON数据?

核心结论

serde_json::from_str() 是严格的标准JSON解析实现,不支持直接解析字符串值未用双引号包裹的非标准JSON,你测试时碰到的解析报错属于预期行为。
按照JSON官方规范要求,所有字符串类型的值(包括对象的键名)必须使用双引号包裹,未加双引号的内容会被判定为非法输入,就会触发你看到的expected value错误。

处理方案

要解析这类不符合标准的JSON内容,可选两种落地方式:

  • 换用支持宽松JSON解析的库
    Rust生态里有专门适配非标准JSON的解析库,默认兼容无引号字符串、单引号、尾逗号等常见的非标准写法,直接替换serde_json的解析逻辑即可,不需要自己做格式修正。
  • 解析前做文本预处理
    如果不想引入额外依赖,可以在调用解析方法前,通过正则匹配或者逐字符遍历的方式,给未被双引号包裹的字符串值补上双引号,把内容修正为符合标准的JSON格式后,再传给serde_json::from_str()解析。预处理时要注意做好边界判断,不要误给数字、布尔值、null、数组、对象这些本身不需要双引号的合法值加引号。
问题复现说明

你给出的测试代码中,url字段对应的值https://www.google.com没有被双引号包裹,解析器读到https起始位置时,识别不出这是合法的JSON值类型(标准JSON合法值仅包括:双引号包裹的字符串、数字、true/false、null、数组、对象),所以在第2行第19列也就是https开头的位置抛出错误。
只要把值补上双引号改成标准格式,就能正常解析运行:

let raw_text = r##"{
    "url" : "https://www.google.com"
}"##;

内容的提问来源于stack exchange,提问作者Debasish Patra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:12:21