patterncsharpModerate
Valid JSON Test
Viewed 0 times
jsontestvalid
Problem
I'm currently using this method to test a string if it valid JSON. The JToken class depends on Newtonsoft.Json.Linq.
Any recommendations to improve?
public static bool IsValidJson(this string stringValue)
{
bool returnValue = false;
string value = null;
if (!String.IsNullOrEmpty(stringValue))
value = stringValue.Trim();
if (!String.IsNullOrWhiteSpace(value) &&
((value.StartsWith("{") && value.EndsWith("}")) || //For object
(value.StartsWith("[") && value.EndsWith("]")))) //For array
{
try
{
value = stringValue.Trim();
var obj = JToken.Parse(value);
returnValue = true;
}
catch
{
returnValue = false;
}
}
else
{
returnValue = false;
}
return returnValue;
}Any recommendations to improve?
Solution
You can reduce indenting by checking the string value upfront to check if it's null or whitespace. No need for the check if
Also you should only catch exceptions that you can handle.
IsNullOrEmpty as IsNullOrWhiteSpace accounts for that check as well. You are also trimming the stringValue twice and reassigning it to value object. Also you should only catch exceptions that you can handle.
public static bool IsValidJson(this string stringValue)
{
if (string.IsNullOrWhiteSpace(stringValue))
{
return false;
}
var value = stringValue.Trim();
if ((value.StartsWith("{") && value.EndsWith("}")) || //For object
(value.StartsWith("[") && value.EndsWith("]"))) //For array
{
try
{
var obj = JToken.Parse(value);
return true;
}
catch (JsonReaderException)
{
return false;
}
}
return false;
}Code Snippets
public static bool IsValidJson(this string stringValue)
{
if (string.IsNullOrWhiteSpace(stringValue))
{
return false;
}
var value = stringValue.Trim();
if ((value.StartsWith("{") && value.EndsWith("}")) || //For object
(value.StartsWith("[") && value.EndsWith("]"))) //For array
{
try
{
var obj = JToken.Parse(value);
return true;
}
catch (JsonReaderException)
{
return false;
}
}
return false;
}Context
StackExchange Code Review Q#156227, answer score: 11
Revisions (0)
No revisions yet.