我需要一些可靠的JSON字符串验证器的帮助 - 一种引入字符串并检查它是否是有效JSON的方法.例如:如果我通过{"color":"red"}或者{"amount":15}它会通过但是"My invalid json"不会发生.简而言之,我需要一些像www.jsonlint.com验证器一样可靠的东西.BTW - 我对反序列化为java对象不感兴趣,因为这不是我的要求.我可能会收到一个任意字符串,我所要做的就是验证它是否具有有效的JSON格式.
我已经在这个论坛上研究过几个关于java JSON字符串验证的帖子.
到目前为止我做了什么:
我尝试使用这些类:org.json.JSONObject并org.json.JSONArray以下列方式:
private static boolean isValidJSONStringObject(String requestBody){
try {
new JSONObject(requestBody);
} catch (JSONException jsonEx) {
return false;
}
return true;
}
private static boolean isValidJSONStringArray(String requestBody) {
try {
new JSONArray(requestBody);
} catch (JSONException jsonEx) {
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是,以下字符串(整行)仍然存在,它们不应该:
{"color":"red"}{"var":"value"}
[1,2,3][true,false]
Run Code Online (Sandbox Code Playgroud)
换句话说,当我有一些对象/数组重复w/out某些父对象中的任何封装时.如果您将这些行粘贴到www.jsonlint.com验证器中,它们都会失败.
我知道总有一个正则表达式选项,但由于JSON的递归性质,我无法保证100%,并且这些正则表达式将会相当复杂.
任何帮助将不胜感激!
Gson可以解决这个问题.这是一个例子:
public boolean isValid(String json) {
try {
new JsonParser().parse(json);
return true;
} catch (JsonSyntaxException jse) {
return false;
}
}
String json = "{\"color\":\"red\"}{\"var\":\"value\"}";
System.out.println(isValid(json));
Run Code Online (Sandbox Code Playgroud)
请注意,Gson确实允许对输入JSON进行一些宽大处理,这可能是不可取的.例如,解析器会自动将未加引号的键转换为引用的键.根据您的预期用途,这可能是也可能不是交易破坏者.
| 归档时间: |
|
| 查看次数: |
13379 次 |
| 最近记录: |