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

使用NewtonSoft解析含NULL的JSON时遇NaN解析错误的解决求助

解决Newtonsoft.Json解析JSON时的"Error parsing NaN value"异常

这个问题我太熟了——你遇到的解析异常完全是因为返回的JSON不符合标准语法,跟你的C#请求/解析代码没关系!我们一步步拆解问题并解决:

问题根源:返回的JSON有3处语法错误

你拿到的JSON字符串存在以下不符合JSON规范的问题:

  1. SUCCESS没有被双引号包裹:JSON里的字符串必须用双引号括起来,而"errmsg" : SUCCESS"里的SUCCESS是裸写的;
  2. 大写的NULL:JSON的空值必须是小写的null,大写NULL会被解析器识别为无效的标识符;
  3. 多余的尾逗号:"zzmmzw" : NULL, }里的逗号是多余的,JSON对象/数组的最后一项不能加逗号。

这些错误导致Newtonsoft.Json的解析器无法正确识别内容,抛出JsonReaderException。

解决方案

方案1:修复后端返回的标准JSON(推荐)

如果能控制API的输出(或者协调后端同学修改),直接把JSON修正为符合规范的格式:

{ 
  "errcode" : "0", 
  "errmsg" : "SUCCESS", 
  "responseObject" :{ 
    "result" :[{ 
      "sjmj" : "ABCD", 
      "zzmmzw" : null 
    }], 
    "total" : 39 
  }
}

修改后,你原来的JsonConvert.DeserializeObject或JObject.Parse代码就能正常工作了。

方案2:在C#代码中修复不规范的JSON(临时 workaround)

如果无法修改后端返回,只能在前端先修正JSON字符串再解析。可以通过字符串替换或正则来处理:

// 获取retString之后,先修复语法问题
retString = retString
    // 给裸写的SUCCESS加上双引号
    .Replace("SUCCESS", "\"SUCCESS\"")
    // 把大写NULL替换为标准的小写null
    .Replace("NULL", "null");

// 用正则移除对象/数组末尾的多余逗号(更通用)
using System.Text.RegularExpressions;
retString = Regex.Replace(retString, @",\s*([}\]])", "$1");

// 现在再解析就不会报错了
JObject jsonObj = JObject.Parse(retString);
// 或者反序列化为自定义实体类
// var response = JsonConvert.DeserializeObject<YourCustomResponseClass>(retString);

注意:字符串替换是临时方案,若后端后续返回的JSON出现其他不规范写法(比如其他裸字符串、不同格式的尾逗号),可能需要调整替换逻辑。长期来看还是要推动后端输出标准JSON。

内容的提问来源于stack exchange,提问作者bb nn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:17:52