C# 校验Json格式

错误json:错误值 -2146.379

[{
        "Key": "surface_heights_average",
        "Value": "-2122.739nm",
        "Description": "surface_heights_average"
    }, {
        "Key": "surface_heights_max",
        "Value": "-2105.69nm",
        "Description": "surface_heights_max"
    }, {
        "Key": "surface_heights_min",
        "Value": "-2146.165nm",
        "Description": "surface_heights_min"
    }, {
        "Key": "hole_heights_average",
        "Value": "-2092.042nm",
        "Description": "hole_heights_average"
    }, {
        "Key": "hole_heights_max",
        "Value": "-2075.576nm",
        "Description": "hole_heights_max"
    }, -2146.379, {
        "Key": "hole_depths_average",
        "Value": "-30.697nm",
        "Description": "hole_depths_average"
    }
]

发现 Newtonsoft.Json 不能正常校验出json异常,除非反序列化到具体的实体类,使用Json Schema 可以正常校验异常位置

一、Newtonsoft.Json 反序列化校验

public bool IsValidJson(string jsonString)
{
    try
    {
        var obj = JsonConvert.DeserializeObject(jsonString);
        //var obj = JObject.Parse(jsonString);
        return true;
    }
    catch (JsonReaderException)
    {
        return false;
    }
}

不能正确校验异常

二、Json Schema 校验 

nuget包:NJsonSchema

string json = @"[{
        ""Key"": ""surface_heights_average"",
        ""Value"": ""-2122.739nm"",
        ""Description"": ""surface_heights_average""
    }, {
        ""Key"": ""surface_heights_max"",
        ""Value"": ""-2105.69nm"",
        ""Description"": ""surface_heights_max""
    }, {
        ""Key"": ""surface_heights_min"",
        ""Value"": ""-2146.165nm"",
        ""Description"": ""surface_heights_min""
    }, {
        ""Key"": ""hole_heights_average"",
        ""Value"": ""-2092.042nm"",
        ""Description"": ""hole_heights_average""
    }, {
        ""Key"": ""hole_heights_max"",
        ""Value"": ""-2075.576nm"",
        ""Description"": ""hole_heights_max""
    }, -2146.379, {
        ""Key"": ""hole_depths_average"",
        ""Value"": ""-30.697nm"",
        ""Description"": ""hole_depths_average""
    }
]
";
var schema =  JsonSchema.FromSampleJson(json);
var errors = schema.Validate(json);

foreach (var error in errors)
    Console.WriteLine($"json异常: 行号:{error.LineNumber} 位置:{error.LinePosition}");

 output:

能正常校验json异常 

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用C#编写的JSON字符串校验功能,该函数将阻止包含不可识别字符的JSON字符串,并返回清除不可识别字符的JSON字符串。 ```csharp using System; using System.Text.RegularExpressions; public class JSONValidator { public static bool IsValidJson(string jsonString) { if (string.IsNullOrEmpty(jsonString)) return false; bool isValid = true; // 去除json字符串中的注释 jsonString = Regex.Replace(jsonString, @"(\/\*([\s\S]*?)\*\/)|(\/\/(.*)$)", "", RegexOptions.Multiline); try { Newtonsoft.Json.Linq.JToken.Parse(jsonString); } catch (Exception) { isValid = false; } return isValid; } public static string RemoveUnrecognizableChars(string jsonString) { // 去除json字符串中的注释 jsonString = Regex.Replace(jsonString, @"(\/\*([\s\S]*?)\*\/)|(\/\/(.*)$)", "", RegexOptions.Multiline); // 去除json字符串中不可识别的字符 jsonString = jsonString.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("\f", "").Replace("\b", ""); jsonString = Regex.Replace(jsonString, @"[^ -~]", ""); return jsonString; } } ``` 使用示例: ```csharp string jsonString = @"{""name"": ""JSON Validator"", ""version"": 1.0, ""description"": ""A C# JSON Validator with unrecognizable characters removal.""}"; if (JSONValidator.IsValidJson(jsonString)) { Console.WriteLine("Valid JSON"); } else { Console.WriteLine("Invalid JSON"); } string cleanedJsonString = JSONValidator.RemoveUnrecognizableChars(jsonString); Console.WriteLine("Cleaned JSON:\n " + cleanedJsonString); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值