java – 在json中解析的尾随字符

我试图检查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.

点赞