经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JSON » 查看文章
简单易懂的JSON框架
来源:cnblogs  作者:JuneZero  时间:2024/6/12 16:16:54  对本文有异议

分享一个由本人编写的JSON框架。

JSON反序列化使用递归方式来解析JSON字符串,不使用任何第三方JAR包,只使用JAVA的反射来创建对象(必须要有无参构造器),赋值,编写反射缓存来提升性能。支持复杂的泛型类型,数组类型等所有类型。(不支持高版本JDK1.8以上的日期类型,如LocalDate,LocalDateTime,需要你修改源码JsonString类来支持)

你可以改造源码,让其支持注解序列化和反序列化。扩展一些功能,如JsonPath路径方式解析。当然前提是你感兴趣和有一定的封装能力的话。。。

  下面是使用案例: 

  1. package test;
  2. import java.lang.reflect.Type;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import java.util.Map;
  6. import june.zero.generic.TypeBuilder;
  7. import june.zero.json.JSON;
  8. public class Main {
  9. public static class User {
  10. public String name;
  11. public int age;
  12. public java.util.Date date;
  13. public int[] hobbys;
  14. public String jsonObjectData;
  15. public String jsonArrayData;
  16. }
  17. public static class Response<T> {
  18. public int code;
  19. public String message;
  20. public T data;
  21. }
  22. public static void main(String[] args) {
  23. // //支持单引号和没有空格名称
  24. // //String json = "{\"name\":\"张三\",\"age\":33}";//标准JSON格式
  25. // //String json = "{'name':'张三','age':33}";//单引号的格式
  26. // //String json = "{name:张三,age:33}";//没有空格名称的格式,不建议使用
  27. String json = "{'name':'张三','age':33,'date':'2024-06-06 12:12:12','hobbys':[1,2,3],'jsonObjectData':{'a':1,'b':2},'jsonArrayData':['a','b','c']}";
  28. User user = JSON.fromJSON(json, User.class);
  29. System.out.println(user.name);//张三
  30. System.out.println(user.age);//33
  31. System.out.println(user.date);//2024-06-06 12:12:12.0
  32. System.out.println(Arrays.toString(user.hobbys));//[1, 2, 3]
  33. //json对象以String存储起来
  34. System.out.println(user.jsonObjectData);//{'a':1,'b':2}
  35. //json数组以String存储起来
  36. System.out.println(user.jsonArrayData);//['a','b','c']
  37. String json2 = "{'code':1,'message':'查询成功','data':[{'name':'李四','age':44},{'name':'王五','age':55}]}";
  38. System.out.println("=====1======");
  39. Type listUserType = new TypeBuilder<Response<List<User>>>() {}.getGenericType();
  40. System.out.println(listUserType);//test.Main.test.Main$Response<java.util.List<test.Main$User>>
  41. Response<List<User>> response1 = JSON.fromJSON(json2, listUserType);
  42. System.out.println(response1.data.get(1).name);//王五
  43. System.out.println("=====2======");
  44. Type listMapType = new TypeBuilder<Response<List<Map<String,Object>>>>() {}.getGenericType();
  45. System.out.println(listMapType);//test.Main.test.Main$Response<java.util.List<java.util.Map<java.lang.String, java.lang.Object>>>
  46. Response<List<Map<String,Object>>> response2 = JSON.fromJSON(json2, listMapType);
  47. System.out.println(response2.data.get(1).get("name"));//王五
  48. System.out.println("=====3======");
  49. Type stringType = new TypeBuilder<Response<String>>() {}.getGenericType();
  50. System.out.println(stringType);//test.Main.test.Main$Response<java.lang.String>
  51. Response<String> response3 = JSON.fromJSON(json2, stringType);
  52. System.out.println(response3.data);//[{'name':'李四','age':44},{'name':'王五','age':55}]
  53. }
  54. }

 

 

开源不易,需要鼓励。使用请标明该来源。

因为可能长时间不会更新JAR包,所以我不建议你使用到真实开发环境。代码易懂,你可以自己维护和扩展功能。测试环境使用的是JDK1.7.0_80

源码:https://files.cnblogs.com/files/blogs/824473/Zjson-source.zip?t=1718154818&download=true

jar包:https://files.cnblogs.com/files/blogs/824473/ZJson.zip?t=1718154823&download=true

原文链接:https://www.cnblogs.com/JuneZero/p/18237283

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号