JSONObject处理java对象和String间类型转化


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
  1. JSON.toJavaObject第2个参数传的Class对象的类要public的,不能是内部类,非public构造方法的类;否则会
    getDeclaredConstructor 异常
/latefirstcmt/17