我试图检查json是否有效并且我遇到了一种奇怪的行为.
当我将一些字符附加到可解析的json时,jackson和gson都会解析它并忽略尾随的字符.我想检查json是否严格有效.请帮忙.我在mapper.configure()中尝试了几个标志,但我找不到确切的设置.
import com.google.gson.JsonParser;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
public class JSONUtil {
public static void main(String[] args) {
String jsonStr = "{\"outputValueSchemaFormat\": \"\",\"sortByIndexInRecord\": 0,\"sortOrder\":\"descending\"}opdfahf";
System.out.println(JSONUtil.isValidJson(jsonStr));
}
public static boolean isValidJson(String str) {
try {
final ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, true);
mapper.readTree(str);
System.out.println(str);
new JsonParser().parse(str);
} catch (Exception e) {
return false;
}
return true;
}
}
PS:这个问题与this不同,因为我使用了相同的代码,但似乎库有一些bug或者缺少一些配置标志.我尝试了几个配置标志,但似乎没有工作.
最佳答案 真实世界解析器被视为接受错误JSON的功能,只要他们能够理解它.他们可以轻松修复的错误(并非所有解析器都可以完成,但有些可以解决一些问题):
>未加引号的标识符=>标识符应该带有或不带引号
>单引号而不是双引号=>琐碎的修复
>尾随字符=>解析器可以检测Json字符串的结尾,并可以忽略后面发生的任何事情
> ……
TL / DR:解析器需要接受有效的Json,它只是未指定它使用不正确但可理解的数据做什么…
恕我直言,如果你想严格验证一个Json字符串,你应该手工建立一个自定义验证器来控制http://json.org/给出的语法,甚至更好的是ECMA-404 specification.