最近项目中要多次使用到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<Object> list = new LinkedList<Object>();
JSONArray jsonarr = JSONArray.fromObject(list);
java对象转List型的对象
Object[] objects = {obj1, obj2, obj3}; // 假设有一个对象数组
List<Object> list = Arrays.asList(objects); // 将对象数组转换为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<StopTransmit> stopTransmitList= JSON.parseArray(str,StopTransmit.class);
转 JSONArray
JSONArray objects = JSON.parseArray(str)
================================================================================================
美丽的分隔符
关于json补充内容:
fastjson 进行json的解析和拼装和用ObjectMapper序列化和反序列化
用ObjectMapper序列化和反序列化
fastjson依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
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);