JSONObject.toJSONString()生成Json字符串的字段缺失问题

最近用JSONObject.toJSONString()生成Json字符串时发现有一个字段的值缺失了,仔细研究后发现是因为我在父类A和子类B上都声明了一个属性c,而生成JSON字符串时,取的是子类对象的属性c,当子类属性c进行初始化的时候,JSON字符串就会出现缺失c字段的情况。

JSONObject.toJSONString()生成Json字符串的字段缺失问题_第1张图片

JSONObject.toJSONString()生成Json字符串的字段缺失问题_第2张图片

这个时候,我们把子类的同名属性删掉,或者把父类的同名属性的值赋值给子类,就可以正确生成对应的JSON字符串了

JSONObject.toJSONString()生成Json字符串的字段缺失问题_第3张图片

JSONObject.toJSONString()生成Json字符串的字段缺失问题_第4张图片

public class FatherDemo {
    private String id;
    //已赋值的同名属性
    private String name;

    public FatherDemo(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class SonDemo extends FatherDemo{
    private String age;

    //未赋值的同名属性
   // private String name;
    public SonDemo(String id, String name, String age) {
        super(id, name);
        this.age = age;
       // this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

 /*   @Override
    public String getName() {
        return name;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }*/
}
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;

/**
 * Created by TianLin on 2019/4/17.
 *如果父类和子类有同一属性,则子类对象转成JSON字符串时,取的是子类对象的该属性值
 */

public class JsonObjectTest {

    @Test
    public void test(){
        SonDemo sonDemo = new SonDemo("1","张三","28");
        System.out.println(JSONObject.toJSONString(sonDemo));
    }
}

你可能感兴趣的:(java,JSON)