我正在尝试解析一个非常简单的 json 片段:
{ key : "value" }
由于 json 需要在字符串两边加上引号,我希望 Gson (2.2.4) 在解析该片段时抛出异常。事实上,情况并非如此,
key
被视为常规字符串。
同样的情况也发生在下面的代码片段中,它看起来显然已经损坏了:
{ key" : "value" }
Gson 使用
key"
作为生成的地图中的键。有没有办法让gson对字符串解析更加严格?
由于遗留原因,Gson 的某些部分默认是宽松的,并且接受根据规范无效的 JSON。最初这并没有得到正确的记录,在某些情况下甚至是错误的。在最近的版本中,文档已得到改进,现在提到默认情况下何时在宽松模式下进行解析。
在版本 2.11.0 中添加了新的
Strictness
API,它允许覆盖此默认的宽松行为,例如使用 GsonBuilder#setStrictness
:
String json = "{ key : \"value\" }";
Gson gson = new GsonBuilder().setStrictness(Strictness.STRICT).create();
// This fails due to JSON syntax errors, as expected
gson.fromJson(json, JsonObject.class);