java - 在 json 中解析尾随字符

标签 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因为我使用了相同的代码,但似乎该库有一些错误或缺少一些配置标志。我尝试了几个配置标志,但似乎都不起作用。

最佳答案

现实世界的解析器将接受不正确的 JSON 作为一项功能,只要他们能够理解它。在他们可以轻松修复的错误中(并非所有解析器都可以,但有些可以修复一些):

  • 不带引号的标识符 => 标识符应该有或没有引号
  • 用单引号代替双引号 => 修复起来很简单
  • trailing characters => 解析器可以检测到 Json 字符串的结尾,并可以忽略后面的任何内容
  • ...

TL/DR:解析器需要接受有效的 Json,只是未指定它对不正确但可理解的数据的处理...

恕我直言,如果您想严格验证 Json 字符串,您应该手动构建一个自定义 validator 来控制 http://json.org/ 中给出的语法。 ,甚至更好的 ECMA-404 specification .

关于java - 在 json 中解析尾随字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38890526/

相关文章:

javascript - 打开excel文件并导出到json

Node.js 中的 JSON 转换

java - 当我尝试运行 Struts Dispatcher 时出现 NullPointerException

java - 如何捕获阻塞 webclient GET 请求的 onStatus 方法中引发的异常?

java - 如何将存在冲突的大型 merge 分解为更易于管理的 block ?

json - 在 Go 中创建结构以从 API 中读取

java - 编译 java 文件时遇到问题(ANT 和 XML 相关)

java - 如何在 Netbeans 8 中将 Hibernate 5.2 与 JPA 2 结合使用

javascript - JSON文档

Python:从字典写入和更新 .json 文件