.NET 6中解析无引号JSON字符串并获取指定属性值
解决无引号JSON字符串解析问题(.NET 6)
你碰到的是非标准JSON格式(键未加双引号,属于JS对象字面量/JSON5格式),Newtonsoft.Json的默认解析器只兼容标准JSON,所以会报错。下面给你两个实用的解决办法:
方法一:用Json5库直接解析
Json5支持无引号键、注释等宽松格式的JSON扩展,.NET有现成的NuGet包可用:
- 安装NuGet包:
Json5 - 解析代码示例:
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
相关产品推荐
相关产品推荐

