在 json 中解析尾随字符

iec*_*007 5 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;
        }
}
Run Code Online (Sandbox Code Playgroud)

PS:这个问题与不同,因为我使用了相同的代码,但似乎库有一些错误或缺少某些配置标志。我尝试了几个配置标志,但似乎都不起作用。

iec*_*007 0

经过对论坛的一些研究后,我发现了一个有趣的链接,有人遇到了同样的问题。团队的回应是

是的。这是设计使然。如果你想捕获这样的问题,你需要构造JsonParser,手动推进它。多个根级别值的存在不被视为有效性问题,但在您的情况下,将捕获不匹配“]”的流结束。

请参考这里的问题

解决方案请参考这里