Skip to content

Fastjson2生成json串字段顺序问题 #12

@passport4869

Description

@passport4869

fastjson2 [2.0.1]当子类和父类同时使用注解@JSONField(ordinal=xxx)时,json串字段顺序非预期输出,在fastjson1中无此问题。
此bug经验证未解决(#9

testcase:

package tmp;

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

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

public class Main {

    @Test
    public void test() {
        Son w = new Son();
        w.setUuid("11");
        w.setOrderNum(12);
        w.setDeptCode(23);
        w.setTotalNum(24);

        assertEquals("{\"uuid\":\"11\",\"orderNum\":12,\"deptCode\":23,\"totalNum\":24}",
                com.alibaba.fastjson.JSON.toJSONString(w));
        //failed
        assertEquals("{\"uuid\":\"11\",\"orderNum\":12,\"deptCode\":23,\"totalNum\":24}",
                JSON.toJSONString(w));

    }

    class Parent {

        @com.alibaba.fastjson.annotation.JSONField(ordinal = 1)
        @JSONField(ordinal = 1)
        private String uuid;

        @com.alibaba.fastjson.annotation.JSONField(ordinal = 2)
        @JSONField(ordinal = 2)
        private Integer orderNum;

        public String getUuid() {
            return uuid;
        }

        public void setUuid(String uuid) {
            this.uuid = uuid;
        }

        public Integer getOrderNum() {
            return orderNum;
        }

        public void setOrderNum(Integer orderNum) {
            this.orderNum = orderNum;
        }
    }

    class Son extends Parent {

        @com.alibaba.fastjson.annotation.JSONField(ordinal = 3)
        @JSONField(ordinal = 3)
        private int deptCode;

        @com.alibaba.fastjson.annotation.JSONField(ordinal = 4)
        @JSONField(ordinal = 4)
        private int totalNum;

        public int getDeptCode() {
            return deptCode;
        }

        public void setDeptCode(int deptCode) {
            this.deptCode = deptCode;
        }

        public int getTotalNum() {
            return totalNum;
        }

        public void setTotalNum(int totalNum) {
            this.totalNum = totalNum;
        }
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions