如何检查给定的string在Java中是否是有效的JSON

如何在Java中validationJSONstring? 或者我可以使用正则expression式parsing它?

一个疯狂的想法,尝试parsing它,并捕获exception:

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

jackson图书馆

一个select是使用jackson图书馆 。 先导入最新版本(现在是):

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

然后,您可以执行正确的答案 ,如下所示:

 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选项

另一个select是使用谷歌Gson 。 导入依赖项:

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

再次,您可以实施提议的解决scheme:

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

下面是一个简单的testing:

 //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(VALID_JSON_STRING); //true boolean secondStringValid = JSONUtils.isJSONValid(NOT_VALID_JSON_STRING); //false 

请注意,可能会有一个“小问题”,因尾随逗号将在3.0.0版本中修复。