大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
曾今遇到一个问题,需要将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的输出格式了,这样看来还是很方便的。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190866.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...