FastJson框架,真的很好用。以下记录,转化的操作方法。
1.配置:在build.gradle(Module:app)中增添引用
//解析json
implementation 'com.alibaba:fastjson:1.2.60'
注:1.2.60之前有重大漏洞:包含"\x"转义符出现OOM。
2.具体操作:
- 实体类或集合转JSON串
String jsonString = JSONObject.toJSONString(实体类);
- JSON串转JSONObject
JSONObject jsonObject = JSONObject.parseObject(jsonString);
- JSON串转实体类
实体类 javaBean = JSON.parseObject(json, 实体类.class);
- JSON串转带泛型的List的集合
List<实体类或其他泛型> list = JSON.parseObject(json, new TypeReference<List<实体类或其他泛型>>(){});
// 或者
List<Student> students = JSON.parseArray(json,实体类.class);
3.遇到问题:(属性首字母大小写的问题)
场景:硬件的同事需要安卓端开发一个APP,进行数据传输,传输格式为Json。我决定使用FastJson进行对自定义NFC信息类转换,key-value都是对方定义的,因此其中key都是首字母大写。
手机使用NFC功能读写都没问题,但是硬件同事发现,写入的数据key的首字母都变成小写了。
原来:转换成Json的时候FastJson的源码会做一段操作,fastjson内部做Bean转换时会使用到 com.alibaba.fastjson.util.TypeUtils,在类加载的时候会去读取环境变量 fastjson.compatibleWithJavaBean。 把对象里面大写属性转换成了小写。
解决方案也有很多,网上查了一下,最好的方法还是在该属性的get方法上添加@JSONField(name = "Name")
代码示例:
//自定义对象
public class NfcBean implements Serializable {
private int State;
@JSONField(name = "State")
public int getState() {
return State;
}
public void setState(int state) {
State = state;
}
}
转换代码:
String nfcStr = JSONObject.toJSONString(nfcBean);