How to make sure that string is valid JSON using JSON.NET

c#, json.net

Solution

Through Code:

Your best bet is to use parse inside a `try-catch` and catch exception in case of failed parsing. (I am not aware of any `TryParse` method).

(Using JSON.Net)

Simplest way would be to `Parse` the string using `JToken.Parse`, and also to check if the string starts with `{` or `[` and ends with `}` or `]` respectively (added from this answer):

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;
    }
}

The reason to add checks for `{` or `[` etc was based on the fact that `JToken.Parse` would parse the values such as `"1234"` or `"'a string'"` as a valid token. The other option could be to use both `JObject.Parse` and `JArray.Parse` in parsing and see if anyone of them succeeds, but I believe checking for `{}` and `[]` should be easier. (Thanks @RhinoDevel for pointing it out)

Without JSON.Net

You can utilize .Net framework 4.5 System.Json namespace ,like:

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

(But, you have to install `System.Json` through Nuget package manager using command: `PM> Install-Package System.Json -Version 4.0.20126.16343` on Package Manager Console) (taken from here)

Non-Code way:

Usually, when there is a small json string and you are trying to find a mistake in the json string, then I personally prefer to use available on-line tools. What I usually do is:

- Paste JSON string in JSONLint The JSON Validator and see if its a valid JSON.

- Later copy the correct JSON to http://json2csharp.com/ and generate a template class for it and then de-serialize it using JSON.Net.

Problem

How can one validate whether a raw string is valid JSON or just text? I'm using JSON.NET.

Original source

Related problems