一尘不染

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

c#

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


阅读 322

收藏
2020-05-19

共1个答案

一尘不染

通过代码:

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

(使用JSON.Net)

最简单的方法是Parse使用JToken.Parse,并检查字符串是否分别以或开头,以{[结束
(从此 答案中 添加 }``]

private static bool IsValidJson(string strInput)
{
    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;
    }
}

添加{[等等的检查的原因是基于这样的事实:JToken.Parse它将解析诸如"1234""'a string'"作为有效令牌的值。另一种选择可能是同时使用JObject.Parse,并JArray.Parse在解析,看看他们的人成功,但我相信检查{}[]应该更容易。
(感谢@RhinoDevel 指出来)

没有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());
}

(但是,您必须 在Package Manager控制台上System.Json使用命令:通过Nuget软件包管理器进行安装PM> Install- Package System.Json -Version 4.0.20126.16343(从此处获取

非代码方式:

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

2020-05-19