为何字符串\"[]\"被fastjson与Jackson判定为合法JSON?
为什么字符串
"[]"被判定为合法JSON? 你给出的测试代码中,变量jsonString1的实际内容是**"[]"**(外层双引号是Java字符串的转义写法,对应JSON里的一个字符串值),这个内容完全符合JSON规范,所以fastjson和Jackson都判定它合法,具体原因如下:
JSON允许单个基本类型作为完整文档
JSON规范并不强制要求文档必须是对象{}或数组[],单个的字符串、数字、布尔值、null都可以作为合法的独立JSON文档。你这里的"[]"就是一个单独的JSON字符串值,属于合法的JSON结构。该字符串符合JSON字符串的格式要求
JSON字符串的规则很明确:
- 必须用双引号包裹
- 内部的普通字符(比如
[、])不需要转义,只有双引号、反斜杠、换行/制表符这类控制字符才需要转义。
你这个字符串正好满足这些要求,是一个标准的合法JSON字符串。
补充说明:如果你的预期是验证空数组[],那Java变量应该定义为String jsonString1 = "[]";(不带外层的双引号转义),这同样是合法JSON,但对应的是数组类型而非字符串类型。
测试代码:
@Test public void validJSON() { String jsonString1 = "\"[]\""; System.out.println("fastjson: " + JSON.isValid(jsonString1)); ObjectMapper objectMapper = new ObjectMapper(); boolean flag = false; try { JsonNode jsonNode1 = objectMapper.readTree(jsonString1); flag = true; } catch (Exception e) { flag = false; } System.out.println("jackjson: " + flag); }
测试结果:
fastjson: true jackjson: true
内容的提问来源于stack exchange,提问作者lianhui.klh
相关产品推荐
相关产品推荐

