如何在 Java 中验证 JSON 字符串?或者我可以使用正则表达式解析它吗?
原文由 sappu 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 Java 中验证 JSON 字符串?或者我可以使用正则表达式解析它吗?
原文由 sappu 发布,翻译遵循 CC BY-SA 4.0 许可协议
杰克逊图书馆
一种选择是使用 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;
}
}
}
谷歌 GSON 选项
另一种选择是使用 Google Gson 。导入依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.5</version>
</dependency>
同样,您可以将建议的解决方案实施为:
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 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); //true
boolean secondStringValid = JSONUtils.isJSONValid(invalidJsonString); //false
请注意,由于尾随逗号可能会出现“小”问题,该问题将在发布 3.0.0
中修复。
原文由 JeanValjean 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
一个疯狂的想法,尝试解析它并捕获异常:
此代码使用 org.json JSON API 实现,可 在 github 、 maven 和部分 Android 上使用。