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

.NET 6中解析无引号JSON字符串并获取指定属性值

解决无引号JSON字符串解析问题(.NET 6)

你碰到的是非标准JSON格式(键未加双引号,属于JS对象字面量/JSON5格式),Newtonsoft.Json的默认解析器只兼容标准JSON,所以会报错。下面给你两个实用的解决办法:

方法一:用Json5库直接解析

Json5支持无引号键、注释等宽松格式的JSON扩展,.NET有现成的NuGet包可用:

  1. 安装NuGet包:Json5
  2. 解析代码示例:
using Json5;

string input = "{overridedCondition:used,makerAndModelMissing:true}";
var jsonObj = Json5.Parse(input);

// 检查属性是否存在并取值
if (jsonObj.TryGetValue("overridedCondition", out var conditionValue))
{
    string condition = conditionValue.ToString(); // 得到"used"
}

if (jsonObj.TryGetValue("makerAndModelMissing", out var missingValue))
{
    bool isMissing = (bool)missingValue; // 得到true
}

方法二:预处理字符串,给键加双引号后用常规方式解析

如果不想引入新库,可以用正则表达式给所有符合标识符规则的键加上双引号,再用Newtonsoft.Json解析:

using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;

string input = "{overridedCondition:used,makerAndModelMissing:true}";
// 正则匹配键(字母数字下划线开头的标识符),替换为带双引号的键
string standardJson = Regex.Replace(input, @"(\w+):", "\"$1\":");

JObject jObj = JObject.Parse(standardJson);

// 检查属性并取值
if (jObj.ContainsKey("overridedCondition"))
{
    string condition = jObj["overridedCondition"].ToString();
}

bool? isMissing = jObj["makerAndModelMissing"]?.ToObject<bool>();

注意:这个方法仅适用于键为普通标识符(无空格、特殊符号)的场景,若键包含特殊字符,需要调整正则规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:22:05