HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpModerate

Valid JSON Test

Submitted by: @import:stackexchange-codereview··
0
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.

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 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.