How to check whether a given string is valid JSON in Java How to check whether a given string is valid JSON in Java json json

How to check whether a given string is valid JSON in Java


A wild idea, try parsing it and catch the exception:

import org.json.*;public boolean isJSONValid(String test) {    try {        new JSONObject(test);    } catch (JSONException ex) {        // edited, to include @Arthur's comment        // e.g. in case JSONArray is valid as well...        try {            new JSONArray(test);        } catch (JSONException ex1) {            return false;        }    }    return true;}

This code uses org.json JSON API implementation that is available on github, in maven and partially on Android.


JACKSON Library

One option would be to use Jackson library. First import the latest version (now is):

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.7.0</version></dependency>

Then, you can implement the correct answer as follows:

import com.fasterxml.jackson.databind.ObjectMapper;public final class JSONUtils {  private JSONUtils(){}  public static boolean isJSONValid(String jsonInString ) {    try {       final ObjectMapper mapper = new ObjectMapper();       mapper.readTree(jsonInString);       return true;    } catch (IOException e) {       return false;    }  }}

Google GSON option

Another option is to use Google Gson. Import the dependency:

<dependency>    <groupId>com.google.code.gson</groupId>    <artifactId>gson</artifactId>    <version>2.5</version></dependency>

Again, you can implement the proposed solution as:

import com.google.gson.Gson;public final class JSONUtils {  private static final Gson gson = new Gson();  private JSONUtils(){}  public static boolean isJSONValid(String jsonInString) {      try {          gson.fromJson(jsonInString, Object.class);          return true;      } catch(com.google.gson.JsonSyntaxException ex) {           return false;      }  }}

A simple test follows here:

//A valid JSON String to parse.String validJsonString = "{ \"developers\": [{ \"firstName\":\"Linus\" , \"lastName\":\"Torvalds\" }, " +        "{ \"firstName\":\"John\" , \"lastName\":\"von Neumann\" } ]}";// Invalid String with a missing parenthesis at the beginning.String invalidJsonString = "\"developers\": [ \"firstName\":\"Linus\" , \"lastName\":\"Torvalds\" }, " +        "{ \"firstName\":\"John\" , \"lastName\":\"von Neumann\" } ]}";boolean firstStringValid = JSONUtils.isJSONValid(validJsonString); //trueboolean secondStringValid = JSONUtils.isJSONValid(invalidJsonString); //false

Please, observe that there could be a "minor" issue due to trailing commas that will be fixed in release 3.0.0.


With Google Gson you can use JsonParser:

import com.google.gson.JsonParser;JsonParser parser = new JsonParser();parser.parse(json_string); // throws JsonSyntaxException