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.