alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] JSON 文件中注释 无法正确处理

mancong opened this issue · comments

问题描述

简要描述您碰到的问题。
自定义 JSON 文件(字符) 中 注释 无法正确的识别处理。

环境信息

请填写以下信息:

  • OS信息: [e.g.:Win10]
  • JDK信息: [e.g.:Openjdk 1.8.0_301]
  • 版本信息:[e.g.:Fastjson2 2.0.2]

重现步骤

如何操作可以重现该问题:

JSON.parse("{\"name\":{// 这是个注释 \"one\":2020,\"two\":\"red!\"}}");
{
	\"name\": { //这是个注释
		\"one\": 2020,
		\"two\": \"red!\"
	}
}

期待的正确结果

对您期望发生的结果进行清晰简洁的描述。
正确解析 JSON 数据

相关日志输出

请复制并粘贴任何相关的日志输出。

com.alibaba.fastjson2.JSONException: illegal input offset 6, char /

	at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:1092)
	at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:1077)
	at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:1077)
	at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:1077)
	at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:1077)
	at com.alibaba.fastjson2.reader.ObjectReaderImplMap.readObject(ObjectReaderImplMap.java:421)
	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:74)
	at net.uncle.module.cache.DefaultCacheLoader.load(DefaultCacheLoader.java:35)

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。
请问此问题是否属于BUG 类别?

目前是不只支持这个非标格式,但为了方便使用,这个会在后面的版本中支持的

已经部分支持注释,并且能跑过你这个case,但支持注释还是实现不完整的,你可以2.0.3-SNAPSHOT版本验证
https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.3-SNAPSHOT/

感谢回复。使用 2.0.3-SNAPSHOT 确实可以 通过。
顺带问一下,有没有针对 JSON Schema 相关的 规划(例如:校验,生成,运算等操作)呢?

你提个issue吧,但应该要晚一点,可能6~9月份这个阶段做

问题描述

2022-05-17 更新状况:

2.0.3 + 2.0.4-SNAPSHOT 版本 经过测试,在某些情况 依旧会在某些场景下存在问题。

重现步骤

方法如下:

JSON.parse("//{"type_array_array":[["abcd","abcd"],[null,"abcd"]]}");

压缩格式:

//{"type_array_array":[["abcd","abcd"],[null,"abcd"]]}

非压缩格式:

//{
//  "type_array_array": [
//    ["abcd", "abcd"],
//    [null, "abcd"]
//  ]
//}

期待的正确结果

正确解析 JSON 数据

相关日志输出

com.alibaba.fastjson2.JSONException: illegal inputoffset 54, charat com.alibaba.fastjson2.reader.ObjectReaderImplMap.readObject(ObjectReaderImplMap.java:381)
	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:82)
	at net.uncle.module.ValidJsonQTest.testValid(ValidJsonQTest.java:36)

附加信息

调试截图:
1652774014(1)

A. 同时发现 任意层级的大括号('{}') 非成对存在时,也会报该类型异常。

例如:

//{
//  "type_array_array": [
//    ["abcd", "abcd"],
//    [null, "abcd"]
//  ]
B. 若是认为注释掉任意的定界符号 时,怎会出现 "illegal input offset XX, char }"
  • 实际该提示文字描述可能不是很直观,但是出错业务 是正确的
    例如:
{
  "type_array_array": {
    "one":["abcd", "abcd"],
    "two": [null, "abcd"]
//  }
}

提示异常:

com.alibaba.fastjson2.JSONException: illegal input offset 92, char }

	at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:1227)
	at com.alibaba.fastjson2.reader.ObjectReaderImplMap.readObject(ObjectReaderImplMap.java:427)
	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:82)
	at net.uncle.module.ValidJsonQTest.testValid(ValidJsonQTest.java:36)