fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG] Inconsistency in JSON.parseObject

Open Cooperzzy opened this issue 1 year ago • 1 comments

问题描述

基于#1487,在fastjson中无法解析,抛出异常。

环境信息

  • OS信息: [MacOS 12.7.4 M1 Pro 16 GB]
  • JDK信息: [Openjdk 17.0.6]
  • 版本信息:[Fastjson 2.0.49/2.0.50-SNAPSHOT]

重现步骤


import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.junit.jupiter.api.Test;

import java.nio.charset.StandardCharsets;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class MutatedTestIssue1487_357 {
    @Test
    public void mutatedTest() {
        String str = "{'P1Q1': {1.0: 'option 1', 2.0: 'option 2', 3.0: 'option 3'}}";
        JSONObject jsonObject = JSON.parseObject(str);
        String expected = "{\"P1Q1\":{1.0:\"option 1\",2.0:\"option 2\",3.0:\"option 3\"}}";
        assertEquals(expected, jsonObject.toJSONString());
        assertEquals(expected, new String(JSON.toJSONBytes(jsonObject), StandardCharsets.UTF_8));
    }

    @Test
    public void mutatedTestfj() {
        String str = "{'P1Q1': {1.0: 'option 1', 2.0: 'option 2', 3.0: 'option 3'}}";
        com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(str);
        String expected = "{\"P1Q1\":{1.0:\"option 1\",2.0:\"option 2\",3.0:\"option 3\"}}";
        assertEquals(expected, jsonObject.toJSONString());
        assertEquals(expected, new String(com.alibaba.fastjson.JSON.toJSONBytes(jsonObject), StandardCharsets.UTF_8));
    }
}

期待的正确结果

正常解析

相关日志输出

com.alibaba.fastjson.JSONException: illegal input ., offset 12, character ., line 1, column 12, fastjson-version 2.0.50 {'P1Q1': {1.0: 'option 1', 2.0: 'option 2', 3.0: 'option 3'}} at com.alibaba.fastjson.JSON.parseObject(JSON.java:198) at issues_20230510.MutatedTestIssue1487_357.mutatedTestfj(MutatedTestIssue1487_357.java:25) Caused by: com.alibaba.fastjson2.JSONException: illegal input ., offset 12, character ., line 1, column 12, fastjson-version 2.0.50 {'P1Q1': {1.0: 'option 1', 2.0: 'option 2', 3.0: 'option 3'}} at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:2287) at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:2060) at com.alibaba.fastjson.JSON.parseObject(JSON.java:189

Cooperzzy avatar May 10 '24 04:05 Cooperzzy

这种非标场景,不是fastjson 1.x 兼容API提升的方向,先不处理了

wenshao avatar May 11 '24 01:05 wenshao