fastjson反序列化时没法判断某个字段是否存在

jslywgbw  于 2022-12-31  发布在  其他
关注(0)|答案(2)|浏览(163)

Bean对象:

public class Student {
	private String name;
	private String gender;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", gender=" + gender + "]";
	}
	
}

测试代码:

String jsons = "{\"gender\":\"male\"}";
	Student stu = JSON.parseObject(jsons,Student.class);
	System.err.println(stu);
	jsons="{\"gender\":\"male\",\"name\":\"null\"}";
	stu = JSON.parseObject(jsons,Student.class);
	System.err.println(stu);

输出结果是一样的,但是输入的字符串一个是有name字段,一个是没有的。我想问下转换为Student对象时,不存在的字段为什么不是默认的null,为什么会是字符串“null”呢?
这样是没法区分字段是否存在的。还是说有其他方式可以判断呢?

还望解答下!

kuuvgm7e

kuuvgm7e1#

测试代码

public static void checkNull(String obj){
        if(obj == null){
            System.out.println("null Object");
        }else if(obj.equals("null")){
            System.out.println("\"null\" String");
        }
    }

    public static void main(String[] args){
        String jsons = "{\"gender\":\"male\"}";
        Student stu1 = JSON.parseObject(jsons,Student.class);
        System.err.println(stu1);
        checkNull(stu1.getName());

        jsons="{\"gender\":\"male\",\"name\":\"null\"}";
        Student stu2 = JSON.parseObject(jsons,Student.class);
        System.err.println(stu2);
        checkNull(stu2.getName());

    }

输出

Student [name=null, gender=male]
null Object
Student [name=null, gender=male]
"null" String

QA

  1. 转换为Student对象时,不存在的字段为什么不是默认的null,为什么会是字符串“null”呢?
    在生成的对象里,确实是你想要的“默认的null”,但是print的时候会自动转换。上述测试代码就是验证这一点。

  2. 这样是没法区分字段是否存在的。还是说有其他方式可以判断呢?
    可以使用"missing"等其他字符串代替你代码中的"null"字符串,避免冲突。

pxiryf3j

pxiryf3j2#

你把json串中numm前后的引号去掉

相关问题