小编典典

如何使用 JSON.NET 确保字符串是有效的 JSON

all

我有一个原始字符串。我只想验证字符串是否是有效的 JSON。我正在使用 JSON.NET。


阅读 61

收藏
2022-07-16

共1个答案

小编典典

通过代码:

最好的办法是在 a 中使用 parsetry-catch并在解析失败的情况下捕获异常。 (我不知道任何TryParse方法)

(使用 JSON.Net)

最简单的方法是Parse使用字符串JToken.Parse,并检查字符串是否分别以or开头和以{or[结尾
(从这个 [答案] 添加)}``]

private static bool IsValidJson(string strInput)
{
    if (string.IsNullOrWhiteSpace(strInput)) { return false;}
    strInput = strInput.Trim();
    if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
        (strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
    {
        try
        {
            var obj = JToken.Parse(strInput);
            return true;
        }
        catch (JsonReaderException jex)
        {
            //Exception in parsing json
            Console.WriteLine(jex.Message);
            return false;
        }
        catch (Exception ex) //some other exception
        {
            Console.WriteLine(ex.ToString());
            return false;
        }
    }
    else
    {
        return false;
    }
}

{ 添加对or等​​的检查的原因[是基于JToken.Parse将诸如"1234"or之类的值解析"'a string'"为有效令牌的事实。另一种选择可能是同时使用JObject.ParseJArray.Parse解析并查看其中是否有人成功,但我相信检查{}并且[]应该更容易。

没有 JSON.Net

您可以利用 .Net framework 4.5 System.Json 命名空间,例如:

string jsonString = "someString";
try
{
    var tmpObj = JsonValue.Parse(jsonString);
}
catch (FormatException fex)
{
    //Invalid json format
    Console.WriteLine(fex);
}
catch (Exception ex) //some other exception
{
    Console.WriteLine(ex.ToString());
}

(但是,您必须System.Json使用命令通过 Nuget 包管理器安装:PM> Install-Package System.Json -Version 4.0.20126.16343在包管理器控制台上)

非编码方式:

通常,当有一个小的 json 字符串并且您试图在 json 字符串中查找错误时,我 个人 更喜欢使用可用的在线工具。我通常做的是:

2022-07-16