关于java 实体类与json 实体类集合与jsonArray的相互转换
最近项目中要多次使用到java 实体类与json 实体类集合与jsonArray的相互转换,接下来把遇到的问题和方法分享一下:
class Stu { private String s1; private String s2; private String s3; public String getS1() { return s1; } public void setS1(String s1) { this.s1 = s1; } public String getS2() { return s2; } public void setS2(String s2) { this.s2 = s2; } public String getS3() { return s3; } public void setS3(String s3) { this.s3 = s3; } @Override public String toString() { return "Stu [s1=" + s1 + ", s2=" + s2 + ", s3=" + s3 + "]"; }}
java对象转jsonArray的方法:
List list = new LinkedList();JSONArray jsonarr = JSONArray.fromObject(list);
java对象转json字符串的方法:
String jsonString = JSONObject.fromObject(obj).toString()
String转JSONObject
JSONObject jsonObject = JSONObject.parseObject(str);
json转字符串,再转为Java对象
String JSONStr = JSON.toJSONString(list);BusLine busLine = JSON.parseObject(JSONStr, BusLine.class);
小编遇到这样在一个问题,当有的对象属性为null时,转JSONArray 时变成了“”,转JSONObject的时候直接转没了,现在需要这样的
Stu stu = new Stu("1111","1111",null);
转完事儿后还是这样的
很多对象都不满足这种效果,现在小编推荐一种适合的方法:
String jsonString = JSONObject.toJSONString(stu, SerializerFeature.WriteMapNullValue);
直接转 完事后就是一个json格式的字符串
这种是直接去掉为null的数据String jsonString3 = com.alibaba.fastjson.JSONObject.toJSONString(stu, SerializerFeature.WriteNullStringAsEmpty);
Fastjson的SerializerFeature序列化相关属性
QuoteFieldNames :输出key时是否使用双引号,默认为true
WriteMapNullValue:是否输出值为null的字段,默认为false
WriteNullNumberAsZero:数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty:List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty:字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
暂时就想了这么多,如果还有,后续继续补
再补几个:转List对象
String str = "[{"metal":"字符型","modelInfoList":[{"stopBundel":"LogineTraining"}]},{"metal":"字符型","modelInfoList":[{"stopBundel":"LogineTraining"}]}]"
List stopTransmitList= JSON.parseArray(str,StopTransmit.class);
转 JSONArray
JSONArray objects = JSON.parseArray(str)
================================================================================================
美丽的分隔符
关于json补充内容:
fastjson 进行json的解析和拼装和用ObjectMapper序列化和反序列化
用ObjectMapper序列化和反序列化
fastjson依赖:
com.alibaba
fastjson
1.2.58
a) writeValueAsString(对象)
将User对象转为json字符串
ObjectMapper mapper = new ObjectMapper();
String jsonstring = mapper.writeValueAsString(User.class);
b) writeValue(参数,对象):
参数:
File: 将对象转为json字符串,保存到指定的文件中
Writer: 将对象转为json字符串,并将json数据填充到字符输出流中
outputStream: 将对象转为json字符串,并将json数据填充到字节输出流中
通过ObjectMapper类的 writeValue()方法序列化java对象至json字符串
ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car("yellow", "renault");
objectMapper.writeValue(new File("target/car.json"), car);
{"color":"yellow","type":"renault"}
c) readValue
将json字符串转成User对象输出
ObjectMapper mapper = new ObjectMapper();
User user = String mapper.readValue(jsonstring,User.class);