Java对象转Json字符串

本文介绍如何使用FastJSON的@JSONField注解来自定义Java对象转换成JSON字符串时的键名称,解决变量名大小写不匹配的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

曾今遇到一个问题,需要将Java对象转换为Json字符串,用fastjson可以很方便的做到。实现代码如下:

import com.alibaba.fastjson.JSONObject;

public class Result {

    private String RESULT_CODE;
    private String RESULT_VALUE;

    public String getRESULT_CODE() {
        return RESULT_CODE;
    }
    public void setRESULT_CODE(String rESULT_CODE) {
        RESULT_CODE = rESULT_CODE;
    }
    public String getRESULT_VALUE() {
        return RESULT_VALUE;
    }
    public void setRESULT_VALUE(String rESULT_VALUE) {
        RESULT_VALUE = rESULT_VALUE;
    }

    public static void main(String[] args) {
        Result result = new Result();
        result.setRESULT_CODE("0");
        result.setRESULT_VALUE("OK");
        String resultJson = JSONObject.toJSONString(result);
        System.out.println(resultJson);
    }
}

本来以为json中的key在json字符串中就是Java对象的成员变量,根据需要就把Java对象的成员变量按照返回结果的要求格式全部写成了大写,运行以上代码,得到如下结果:

{"rESULT_CODE":"0","rESULT_VALUE":"OK"}

根据以上输出结果,将Java对象转化成了Json字符串,但是Java对象成员变量首字母变成了小写,这个就不是我想要的结果了。

后来经过查找资料,得知可以使用FastJson中@JSONField注解来解决,具体实现如下:

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;

public class Result {

    private String RESULT_CODE;
    private String RESULT_VALUE;

    @JSONField(name = "RESULT_CODE")
    public String getRESULT_CODE() {
        return RESULT_CODE;
    }
    public void setRESULT_CODE(String rESULT_CODE) {
        RESULT_CODE = rESULT_CODE;
    }
    @JSONField(name = "RESULT_VALUE")
    public String getRESULT_VALUE() {
        return RESULT_VALUE;
    }
    public void setRESULT_VALUE(String rESULT_VALUE) {
        RESULT_VALUE = rESULT_VALUE;
    }

    public static void main(String[] args) {
        Result result = new Result();
        result.setRESULT_CODE("0");
        result.setRESULT_VALUE("OK");
        String resultJson = JSONObject.toJSONString(result);
        System.out.println(resultJson);
    }
}

运行以上代码,得到结果如下:

{"RESULT_CODE":"0","RESULT_VALUE":"OK"}

由以上结果得出,成员变量首字母小写的问题解决了。但是是什么原因导致的呢?

原来fastjson的key是根据Java对象里面的getter和setter方法来的,不是根据属性名的,所以会出现这个问题,你在属性的get和set方法上面写上标注@JSONField(name = "RESULT_CODE") 就能解决了。

那么,既然如此,有了注解之后是不是跟Java对象的成员变量就没关系了呢,我们把Java对象的成员变量改成小写,使用注解保持原来格式,继续测试。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;

public class Result {


    private String result_code;
    private String result_value;

    @JSONField(name = "RESULT_CODE")
    public String getResult_code() {
        return result_code;
    }
    public void setResult_code(String result_code) {
        this.result_code = result_code;
    }
    @JSONField(name = "RESULT_VALUE")
    public String getResult_value() {
        return result_value;
    }
    public void setResult_value(String result_value) {
        this.result_value = result_value;
    }

    public static void main(String[] args) {
        Result result = new Result();
        result.setResult_code("0");
        result.setResult_value("OK");
        String resultJson = JSONObject.toJSONString(result);
        System.out.println(resultJson);
    }
}

运行以上程序,得到了跟之前一样的结果:

{"RESULT_CODE":"0","RESULT_VALUE":"OK"}

根据以上 结果得出,使用了fastjson的@JSONField之后,就可以在不改变Java对象成员变量的前提下,自定义json的输出格式了,这样看来还是很方便的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值