(四)json-lib包的使用
既然json-lib包比org.json包重量级,那么json-lib包肯定有很多org.json包没有的类和方法,这篇笔记简单记录json-lib包中,json数据转换为java bean、Collection、java array等的方法。
1.json-lib包与org.json包
①org.json包比json-lib包要轻量级,不需要依赖各种工具包;
②将Java对象(beans, maps, collections, java arrays等)转换为json数据时,两者的功能差不多;
③同样拥有各种getXXX()和optXXX()方法等来解析json数据;
④json-lib包可直接将json数据转换为java bean、Collection、java array等
2.解析json对象
沿用上篇笔记的Student类:
2.1 json数据转为bean类
例子:
package jsonlib; import net.sf.json.*; public class JsonlibTest { public static void main(String[] args) { // 创建一个bean Student student = new Student(); student.setName("JTZen9"); student.setAge(21); student.setSex("male"); // bean类转为json对象 JSONObject jsonObject = JSONObject.fromObject(student); System.out.println(jsonObject); // 方法一,json对象转为bean类 Student student2 = (Student) JSONObject.toBean(jsonObject, Student.class); System.out.println(student2.getName() + " " + student2.getAge() + " " + student2.getSex()); // 方法二 JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Student.class); Student student3 = (Student) JSONObject.toBean(jsonObject, jsonConfig); System.out.println(student3.getName() + " " + student3.getAge() + " " + student3.getSex()); } }
输出结果:
2.2 json数据转为List类
例子:
package jsonlib; import java.util.ArrayList; import java.util.List; import net.sf.json.*; public class JsonlibTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("JTZen9"); list.add("heiheihei"); list.add("DSMGYH"); JSONArray jsonArray = JSONArray.fromObject(list); System.out.println(jsonArray); List<String> list2 = (List<String>) JSONArray.toList(jsonArray); System.out.println(list2.get(0) + " " + list2.get(1) + " " + list2.get(2)); List<Student> listStudent = new ArrayList<>(); for (int i = 0; i < 3; i++) { Student student = new Student(); student.setName("JTZen9" + i); student.setAge(i); student.setSex("male"); listStudent.add(student); } JSONArray sJsonArray = JSONArray.fromObject(listStudent); System.out.println(sJsonArray); // JSONArray转换为List<student>,方法一 List<Student> sList1 = (List<Student>) JSONArray.toList(sJsonArray, Student.class); System.out.println(sList1.get(1).getAge()); // 方法二 JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Student.class); List<Student> sList2 = (List<Student>) JSONSerializer.toJava(sJsonArray, jsonConfig); System.out.println(sList2.get(1).getAge()); } }
输出结果:
3.jsonConfig类
jsonConfig类是帮助配置序列化过程的实用程序类,可以用它来在json和java对象转换过程中进行一些配置设置。
例如:当我们将一个java bean类转换为json对象时,往往会把bean类中所有的属性字段转为json对象的相应字段。如果我们要过滤掉bean类中的一些属性的时候呢,就可以使用jsonConfig类。
package jsonlib; import net.sf.json.*; public class JsonlibTest { public static void main(String[] args) { Student student = new Student(); student.setName("JTZen9"); student.setSex("male"); student.setAge(21); JSONObject jsonObject1 = JSONObject.fromObject(student); System.out.println(jsonObject1); //正常输出三个字段 JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setExcludes(new String[]{ "sex" }); //过滤要输出的字段 JSONObject jsonObject2 = JSONObject.fromObject(student, jsonConfig); System.out.println(jsonObject2.toString()); } }
输出结果如下(过滤了sex字段):
jsonConfig类还有很多其他的用法,以后用到的时候在继续完善。
4.结束语
json-lib包,比org.json包具有的功能要多,很多方法日后用到再记录。
可以根据需求选择不同的工具包,org.json包比较轻量级,但实现的功能有限,如果只是简单的转换java对象为json数据,那么org.json包就足够了。