在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串与JSON对象互相转换,自己在这一方面的概念总是很混乱,最近看源码和博客,在此记录一下。注意:全程用的是fastjson
首先JSON有两种格式,一种是对象格式,一种是对象数组。
在JSON使用中主要的3个类:JSON,JSONObjec,JSONArray
其中JSONObjec
和JSONArray
继承于JSON
的。
JSON对象(JSONObject)
{"id":1,"name":"chen"}
JSON对象数组(JSONArray)
[ {"id":1,"name":"chen"}, {"id":2,"name":"张三"} ]
下面直接进入正题:
Java Bean是指Java中的一个普通对象(实体类)例如:
public class Student{ private String name; // 姓名 private Integer age; // 年龄 public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(Integer age){ this.age = age; } public Integer getAge(){ return age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
使用JSON
类的toJSONString()
方法,实现JSON
对象转化为JSON
字符串和Java Bean
对象转化为JSON
字符串。仔细观察源码发现,该方法经过多次重载,但最终都是实现JSON
对象转化为JSON
字符串和Java Bean
对象转化为JSON
字符串。
@Test public void BeanToJSONTest(){ Student student = new Student(); student.setName("小明"); student.setAge(20); String s1 = JSON.toJSONString(student); String s2 = JSONObject.toJSONString(student); String s3 = JSONArray.toJSOnString(student); System.out.println("s1: " + s1); System.out.println("s2: " + s2); System.out.println("s3: " + s3); } // 输出 s1: {"age":20,"name":"小明"} s2: {"age":20,"name":"小明"} s3: {"age":20,"name":"小明"}
JSON.toJSONString()
、JSONObject.toJSONString
和JSONArray.toJSOnString
,上面说到JSONObject
和JSONArray
是继承JSON
的,看JSONObject
和JSONArray
的源码并没有重写父类的toJSONString()
的方法,而是直接使用父类的toJSONString
方法,之前一直弄不明白,看了源码才知道。
使用JSON
类的parseObject()
方法,实现JSON
字符串转换为JSON
对象或Java Bean
对象。
@Test public void JOSNToBeanTest(){ String strJson = "{\"age\":20,\"name\":\"小明\"}"; JSONObject jsonObject = JSON.parseObject(strJson); System.out.println("jsonObject: " + jsonObject); Student student = JSON.parseObject(strJson,Student.class); System.out.println("student: " + student); } // 输出 jsonObject: {"name":"小明","age":20} student: Student{name='小明', age=20}
该方法返回JSONObject
对象,用于实现JSON
字符串向JSON
对象的转化,其内部调用了parse()
方法,调用底层的DefaultJSONParse
r解析类进行转化,在转化失败时,抛出can not cast to JSONObject
异常。
该方法不仅能实现JSON
字符串向JSON
对象的转化,经过重载之后,还能实现JSON
字符串向Java Bean
对象的转化