JSONArray JSONObject转java对象,toArray toBean
简介
我们经常使用json进行数据通信,就会涉及json字符串和对应的java对象的相
互转换,当然这个转化完全可以原始的方式做,但是就很多重复代码,不够通用,
其实已经有实现好的轮子,我们拿过来用即可。我这里使用的库是阿里的com.alibaba.fastjson,使用JSON,JSONObject,JSONArray类;
转换
java对象转JSONObject或JSONArray
JSONObject.toJSONString()
JSONArray.toJSONString()
Man man = new Man("name", 11);
String jstr = JSONObject.toJSONString(man);
System.out.println(jstr);
json字符串转JSONObject或JSONArray
JSONObject.parseObject()
JSONArray.parseArray()
示例:
JSONObject jObj = JSONObject.parseObject("{\"opTime\" : \"22\", \"name\" : \"cppcloud\" }");
System.out.println(jObj);
JSONArray jArr = JSONArray.parseArray("[\"he\", \"jl\"]");
System.out.println(jObj);
JSONObject或JSONArray转java对象
JSON.toJavaObject(转Object和数组都用此静态函数)
示例:
Record.java
...
public class Record {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public Integer getAge() {
return name;
}
public void setAge(Integer a) {
age = a;
}
}
test.java
...
public static void main(String[] args) {
JSONObject jObj = JSONObject.parseObject("{\"age\" : 22, \"name\" : \"hooo\" }");
Record vo = JSON.toJavaObject(jObj, Record.class);
/*
Record vo1 = null; // 注意
vo1 = JSON.toJavaObject(jObj, vo1.getClass()); // 这种方式会出错,因为vo1==null
*/
System.out.println(vo);
JSONObject jArray = JSONObject.parseObject("[{\"age\" : 22, \"name\" : \"hooo\" }]");
Record[] arrVo = JSON.toJavaObject(jArray, Record[].class);
System.out.println(arrVo.length);
}
- 注意:
1. JSONArray转java数组不要用JSON.toArray()方法,否则会失败并报错
JSONArray.toArray java.lang.ArrayStoreException: null
- JSON.toJavaObject第2个参数传的Class对象的类要public的,不能是内部类,非public构造方法的类;否则会
getDeclaredConstructor 异常