alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.
Apache License 2.0
3.72k stars 481 forks source link

[FEATURE]在解析"非完全正确的JSON文本"时,可否先尽可能的尝试解析操作? #2105

Open mancong opened 9 months ago

mancong commented 9 months ago

请描述您的需求或者改进建议

对您想要需求或建议的清晰简洁的描述。 假设有以下Json Text:

{
    "uid": "123456789",
    "clientSn": "A0001",
    "model": {
        "identity": "client",
        "dataformat": "HEX",
        "uid": "10086",
        "protocol": "TCP",
        "type":"CMD",
    }
}

注意: type 属性值后的逗号,并为去除!

我尝试了27种的 JSONReader.Feature.*后,依旧为报错!

期待

可否对 多余的逗号自动进行去除(或修正. 举例说明,并非仅限于此处情况!) 亦或 给予友好的错误提示方式(相比较更倾向于前面选择)!

请描述你建议的实现方案

对您想要需求或建议的实现方案的详细描述。

描述您考虑过的替代方案

对您考虑过的任何替代解决方案或功能的描述。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。 Version: fastjson2-2.0.43 Springboot: 3.2.0 JDK: OpenJDK 21.0.1

wenshao commented 9 months ago
  @Test
    public void test() {
        String str = "{\n" +
                "\t\"uid\": \"123456789\",\n" +
                "\t\"clientSn\": \"A0001\",\n" +
                "\t\"model\": {\n" +
                "\t\t\"identity\": \"client\",\n" +
                "\t\t\"dataformat\": \"HEX\",\n" +
                "\t\t\"uid\": \"10086\",\n" +
                "\t\t\"protocol\": \"TCP\",\n" +
                "\t\t\"type\":\"CMD\",\n" +
                "\t}\n" +
                "}";
        Bean bean = JSON.parseObject(str, Bean.class);
        assertEquals("123456789", bean.uid);
        assertEquals("A0001", bean.clientSn);
        assertEquals("TCP", bean.model.protocol);
        assertEquals("CMD", bean.model.type);
    }

    public static class Bean {
        public String uid;
        public String clientSn;
        public Model model;
    }

    public static class Model {
        public String protocol;
        public String type;
    }

问题没重现