JSON、JSONObject、JSONArray、javabean之间的关系、获取值以及相互转换

PS:如果只想看方法直接向后滑动。

JSON、JSONObject、JSONArray都是FastJson框架中的东西,JSON协议使用方便,越来越流行,JSON的处理器有很多,这里先介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架。

FastJson的优点:

1.FastJson数度快,无论序列化和反序列化,都是当之无愧的fast 
2.功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum) 
3.零依赖(没有依赖其它任何类库)

JSON、JSONObject、JSONArray、javabean关系的解析:

首先JSON、JSONObject、JSONArray是属于FastJson框架的类,它们就是普通的类只不过在FastJson框架赋予了它们对json格式字符的处理能力。

JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。

JSONObject:fastJson提供处理对象样子的json字符的类。

JSONArray:fastJson提供处理数组样子的json字符的类。

当然你也可以不用JSONObject、JSONArray,直接将json字符串转换为能匹配上的javabean。如果你没有能匹配的那你就考虑转换为JSONObject、JSONArray,因为JSONObject、JSONArray也可以对属性进行操作。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

声明,由于JSONObject和JSONArray继承了JSON,所以也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆下面方法都使用JSON。

1.json字符 转换为 JSONObject

  JSONObject jsonObject = JSON.parseObject("对象样子的json字符");

 JSONObject jsonObject = JSONObject.fromObject("对象样子的json字符");

//  获取属性: 
String teacherName = jsonObject.getString("teacherName"); 
Integer teacherAge = jsonObject.getInteger("teacherAge"); 
JSONObject course = jsonObject.getJSONObject("course"); 
JSONArray students = jsonObject.getJSONArray("students");

2.json字符 转换为 JSONArray

JSONArray jsonArray = JSON.parseArray("数组样子的json字符"); 

JSONArray jsonArray = JSONArray .fromObject("数组样子的json字符");                

//获取数组中对象(其实就是JSONObject):jsonArray为JSONArray类型
JSONObject jsonObject = jsonArray.getJSONObject(i);
JSONObject jsonObject = (JSONObject) jsonArray.get(i);

3.json字符 转换为 javabean

//普通对象
Student student = JSON.parseObject("对象样子的json字符", new TypeReference<Student>() {});
//因为JSONObject继承了JSON,所以这样也是可以的
//Student student1 = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>(){});

//数组类型
ArrayList<Student> students = JSON.parseObject(JSON_ARRAY_STR,new TypeReference<ArrayList<Student>>() {});

//因为JSONArray继承了JSON,所以这样也是可以的
//ArrayList<Student> students1 = JSONArray.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {});
        
for (Student student : students) {
     System.out.println(student.getStudentName()+":"+student.getStudentAge());
}

json字符串与javaBean之间的转换推荐使用 TypeReference<T> 这个类,使用泛型可以更加清晰,由于其构造方法使用 protected 进行修饰,所以在其他包下创建其对象的时候,要用其实现类的子类:new TypeReference<Teacher>() {}。当然也有其它的转换方式

4.javabean 转换为 json字符  : JSON.toJSONString(obj);

5.JSONObject、JSONArray 转换为 json字符     :toJSONString()

6.javabean 转换为 JSONObject、JSONArray:JSON.toJSON(obj),注意:强制类型转换。

最后声明本文参考:https://www.cnblogs.com/cdf-opensource-007/p/7106018.html

猜你喜欢

转载自blog.csdn.net/zf18234031156/article/details/82789592