FastJson笔记
FastJson相对其他JSON库的特点是快,从2011年FastJson发布1.1.x版本之后,其性能从未被其他java实现的JSON库超越。
FastJson在阿里巴巴大规模使用,在数万台服务器上部署,FastJson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。
FastJson有非常多的测试case,在1.2.11版本中,测试case超过3321个。每次发布都会进行回归测试,保证质量稳定。
FastJson的API十分简洁。
String text = JSON.toJSONString(obj); // 序列化 VO vo = JSON.parseObject("{...}", VO.class); // 反序列化
支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。
Student stu = new Student(); stu.setName("张三"); stu.setAge(15); stu.setAddress("成都"); // java对象 转换成 JSON 字符串 String jsonString = JSON.toJSONString(stu); System.out.println(jsonString); // {"address":"成都","age":15,"name":"张三"}
@Test public void test1() { // List集合转 JSON字符串 ArrayList<Student> list = new ArrayList<>(); Student stu1 = new Student(); stu1.setId(1); stu1.setAge(22); stu1.setName("king"); stu1.setFlag(true); stu1.setAddress("成都"); Student stu2 = new Student(); stu2.setId(2); stu2.setAge(24); stu2.setName("green"); stu2.setFlag(false); stu2.setAddress("重庆"); list.add(stu1); list.add(stu2); String jsonString = JSON.toJSONString(list,SerializerFeature.PrettyFormat); System.out.println(jsonString); } /* [ { "address":"成都", "age":22, "flag":true, "id":1, "name":"king" }, { "address":"重庆", "age":24, "flag":false, "id":2, "name":"green" } ] */
@Test public void test2() { // Map集合 转JSON格式字符串 HashMap<String, Student> map = new HashMap<>(); Student stu1 = new Student(); stu1.setId(1); stu1.setAge(22); stu1.setName("king"); stu1.setFlag(true); stu1.setAddress("成都"); Student stu2 = new Student(); stu2.setId(2); stu2.setAge(24); stu2.setName("green"); stu2.setFlag(false); stu2.setAddress("重庆"); map.put("stu1", stu1); map.put("stu2", stu2); String jsonString = JSON.toJSONString(map,SerializerFeature.PrettyFormat); System.out.println(jsonString); } /* { "stu2":{ "address":"重庆", "age":24, "flag":false, "id":2, "name":"green" }, "stu1":{ "address":"成都", "age":22, "flag":true, "id":1, "name":"king" } } */
String data = "{\"address\":\"成都\",\"age\":15,\"name\":\"张三\"}"; JSONObject parseObject = JSON.parseObject(data); // System.out.println(parseObject); String address = parseObject.getString("address"); Integer age = parseObject.getInteger("age"); System.out.println(address); // 成都 System.out.println(age); // 15
@Test public void test3() { // JSON格式字符串转成List 集合 String jsonString = "[{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"},{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"}]"; List<Student> students = JSON.parseArray(jsonString, Student.class); for (Student stu :students) { System.out.println(stu); } } /* Student(id=1, age=22, name=king, address=成都, flag=true) Student(id=2, age=24, name=green, address=重庆, flag=false) */
@Test public void test4() { // JSON格式字符串转成 Map集合 String jsonString = "{\"stu2\":{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"},\"stu1\":{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"}}"; Map<String,Student> map = JSON.parseObject(jsonString, new TypeReference<HashMap<String, Student>>(){} ); System.out.println(map); } /* { stu2=Student(id=2, age=24, name=green, address=重庆, flag=false), stu1=Student(id=1, age=22, name=king, address=成都, flag=true) } */
@JSONField注解 可以用在 方法(method),属性(field)以及方法中的参数(parameter)上
JSONField注解的源码
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public @interface JSONField { int ordinal() default 0; // 配置序列化和反序列化的顺序 String name() default ""; // 指定字段的名称 String format() default ""; // 指定字段的格式,对⽇期格式有⽤ boolean serialize() default true; // 是否序列化 boolean deserialize() default true; // 是否反序列化 // 可以通过serialzeFeatures、parseFeatures的属性值SerializerFeature.WriteMapNullValue来控制 SerializerFeature[] serialzeFeatures() default {}; // 控制序列化的一些规则 Feature[] parseFeatures() default {}; // 控制序列化的一些规则 String label() default ""; boolean jsonDirect() default false; Class<?> serializeUsing() default Void.class; Class<?> deserializeUsing() default Void.class; String[] alternateNames() default {}; boolean unwrapped() default false; String defaultValue() default ""; }
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/30865