JSON-lib是一个java库,用于将bean、映射、集合、java数组和XML转换为JSON,或将JSON转为beans和DynaBeans。JSON-lib最后的版本是2.4,更新时间是2010年12月14日,在以前的项目或系统中用的用的较多;本文简单介绍下其使用方法。文中所使用到的软件版本:Java 1.8.0_191、JSON-lib 2.4。

1、引入依赖

  1. <dependency>
  2. <groupId>net.sf.json-lib</groupId>
  3. <artifactId>json-lib</artifactId>
  4. <version>2.4</version>
  5. <classifier>jdk15</classifier>
  6. </dependency>

2、序列化

  1. public static String serialize() {
  2. MyBean bean = new MyBean();
  3. bean.setS("测试字符串");
  4. Calendar calendar = Calendar.getInstance();
  5. calendar.add(Calendar.HOUR_OF_DAY, -1);
  6. bean.setD(calendar.getTime());
  7. JsonConfig config = new JsonConfig();
  8. //防止自包含
  9. config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
  10. //Date类型转化
  11. config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
  12. //过滤s3字段
  13. config.setExcludes(new String[]{"s3"});
  14. //过滤值为null的字段
  15. config.setJsonPropertyFilter(new PropertyFilter() {
  16. @Override
  17. public boolean apply(Object arg0, String arg1, Object value) {
  18. return value == null;
  19. }
  20. });
  21. List<MyBean> list = new ArrayList<MyBean>();
  22. list.add(bean);
  23. Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
  24. map.put("data", list);
  25. JSON json = JSONSerializer.toJSON(map, config);
  26. String result = json.toString();
  27. System.out.println(json.toString());
  28. return result;
  29. }

3、反序列化

  1. public static void deserialize() {
  2. try {
  3. //处理日期类型
  4. JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"yyyy-MM-dd HH:mm:ss"}));
  5. String s = serialize();
  6. Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
  7. classMap.put("data", MyBean.class);
  8. Map<String, List<MyBean>> map = (Map<String, List<MyBean>>) JSONObject.toBean(JSONObject.fromObject(s), Map.class, classMap);
  9. System.out.println(map);
  10.  
  11. //直接通过api获取相应数据
  12. JSONObject obj = JSONObject.fromObject(s);
  13. JSONArray data = obj.getJSONArray("data");
  14. JSONObject bean = data.getJSONObject(0);
  15. System.out.println(bean.getString("s"));
  16. //...
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. }

4、完整例子

  1. package com.inspur.demo.json;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import net.sf.ezmorph.object.DateMorpher;
  12. import net.sf.json.JSON;
  13. import net.sf.json.JSONArray;
  14. import net.sf.json.JSONObject;
  15. import net.sf.json.JSONSerializer;
  16. import net.sf.json.JsonConfig;
  17. import net.sf.json.processors.JsonValueProcessor;
  18. import net.sf.json.util.CycleDetectionStrategy;
  19. import net.sf.json.util.JSONUtils;
  20. import net.sf.json.util.PropertyFilter;
  21.  
  22. /**
  23. * JSON-lib操作JSON数据
  24. */
  25. public class JsonLibCase {
  26. /**
  27. * 序列化
  28. */
  29. public static String serialize() {
  30. MyBean bean = new MyBean();
  31. bean.setS("测试字符串");
  32. Calendar calendar = Calendar.getInstance();
  33. calendar.add(Calendar.HOUR_OF_DAY, -1);
  34. bean.setD(calendar.getTime());
  35. JsonConfig config = new JsonConfig();
  36. //防止自包含
  37. config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
  38. //Date类型转化
  39. config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
  40. //过滤s3字段
  41. config.setExcludes(new String[]{"s3"});
  42. //过滤值为null的字段
  43. config.setJsonPropertyFilter(new PropertyFilter() {
  44. @Override
  45. public boolean apply(Object arg0, String arg1, Object value) {
  46. return value == null;
  47. }
  48. });
  49. List<MyBean> list = new ArrayList<MyBean>();
  50. list.add(bean);
  51. Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
  52. map.put("data", list);
  53. JSON json = JSONSerializer.toJSON(map, config);
  54. String result = json.toString();
  55. System.out.println(json.toString());
  56. return result;
  57. }
  58.  
  59. /**
  60. * 反序列化
  61. */
  62. public static void deserialize() {
  63. try {
  64. //处理日期类型
  65. JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"yyyy-MM-dd HH:mm:ss"}));
  66. String s = serialize();
  67. Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
  68. classMap.put("data", MyBean.class);
  69. Map<String, List<MyBean>> map = (Map<String, List<MyBean>>) JSONObject.toBean(JSONObject.fromObject(s), Map.class, classMap);
  70. System.out.println(map);
  71.  
  72. //直接通过api获取相应数据
  73. JSONObject obj = JSONObject.fromObject(s);
  74. JSONArray data = obj.getJSONArray("data");
  75. JSONObject bean = data.getJSONObject(0);
  76. System.out.println(bean.getString("s"));
  77. //...
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. }
  81. }
  82.  
  83. public static void main(String[] args) {
  84. serialize();
  85. deserialize();
  86. }
  87.  
  88. static class DateJsonValueProcessor implements JsonValueProcessor {
  89. @Override
  90. public Object processArrayValue(Object value, JsonConfig arg1) {
  91. return process(value);
  92. }
  93.  
  94. @Override
  95. public Object processObjectValue(String key, Object value, JsonConfig arg2) {
  96. return process(value);
  97. }
  98. private Object process(Object value) {
  99. try {
  100. if (value instanceof Date) {
  101. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  102. return sdf.format((Date) value);
  103. }
  104. } catch (Exception e) {
  105. e.printStackTrace();
  106. }
  107. return value == null ? "" : value.toString();
  108. }
  109. }
  110. }

JsonLibCase

  1. package com.inspur.demo.json;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Date;
  5.  
  6. public class MyBean {
  7. private String s = "字符串";
  8. private String s2;
  9. private String s3 = "字符串3";
  10. private int i = 123;
  11. private Integer i2;
  12. private char c = '到';
  13. private char[] c2 = new char[]{'a', 'b'};
  14. private Date d = new Date();
  15. private Date[] d2 = new Date[]{new Date(), new Date()};
  16. public String getS() {
  17. return s;
  18. }
  19. public void setS(String s) {
  20. this.s = s;
  21. }
  22. public String getS2() {
  23. return s2;
  24. }
  25. public void setS2(String s2) {
  26. this.s2 = s2;
  27. }
  28. public String getS3() {
  29. return s3;
  30. }
  31. public void setS3(String s3) {
  32. this.s3 = s3;
  33. }
  34. public int getI() {
  35. return i;
  36. }
  37. public void setI(int i) {
  38. this.i = i;
  39. }
  40. public Integer getI2() {
  41. return i2;
  42. }
  43. public void setI2(Integer i2) {
  44. this.i2 = i2;
  45. }
  46. public char getC() {
  47. return c;
  48. }
  49. public void setC(char c) {
  50. this.c = c;
  51. }
  52. public char[] getC2() {
  53. return c2;
  54. }
  55. public void setC2(char[] c2) {
  56. this.c2 = c2;
  57. }
  58. public Date getD() {
  59. return d;
  60. }
  61. public void setD(Date d) {
  62. this.d = d;
  63. }
  64. public Date[] getD2() {
  65. return d2;
  66. }
  67. public void setD2(Date[] d2) {
  68. this.d2 = d2;
  69. }
  70. @Override
  71. public String toString() {
  72. return "MyBean [s=" + s + ", s2=" + s2 + ", s3=" + s3 + ", i=" + i + ", i2=" + i2 + ", c=" + c + ", c2="
  73. + Arrays.toString(c2) + ", d=" + d + ", d2=" + Arrays.toString(d2) + "]";
  74. }
  75. }

MyBean

Java操作JSON数据(1)--JSON-lib操作JSON数据的更多相关文章

  1. Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

    日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...

  2. Java 常见数据交换格式——xml、json、yaml

    目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...

  3. IO编程、操作文件或目录、序列化、JSON

    IO中指Input/Output,即输入和输出:涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口 1.由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,存在速度严重不匹配问题.eg ...

  4. 用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库

    前言 在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一个具体的 struct:如果想要获取值就需要先做断言将其转换为 map 或 ...

  5. Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法

    前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...

  6. Java基础知识强化之IO流笔记57:数据输入输出流(操作基本数据类型)

    1. 数据输入输出流(操作基本数据类型) (1)数据输入流:DataInputStream DataInputStream(InputStream in) (2)数据输出流:DataOutputStr ...

  7. Java获取http和https协议返回的json数据

    现在很多公司都是将数据返回一个json,而且很多第三方接口都是返回json数据,而且还需要使用到http协议,http协议是属于为加密的协议,而https协议需要SSL证书,https是将用户返回的信 ...

  8. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  9. 在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

    在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

  10. json学习系列(8)JSON与JAVA数据的相互转换实例

    一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author ...

随机推荐

  1. Nexus Repository Manager OSS 3.x 安装配置

    前言想要使用maven搭建项目,但是国内的网络环境可以想象,还有公司自己开发的jar包等问题,所以需要搭建一个maven的私服,这样便于管理. 找了一些教程,顺便记下来,当做笔记. 本文以Window ...

  2. node.js GET与POST请求

    node.js GET与POST请求 转 http://www.voidcn.com/article/p-ncglaiqx-bdx.html 标签 get post node.js 栏目 Node.j ...

  3. vue-cli3项目关闭烦人的代码检测

    参考博客:https://blog.csdn.net/e1172090224/article/details/99636767 vue.config.js module.exports = { lin ...

  4. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案之使用RTSP流判断摄像机设备是否在线以及快照抓取

    背景分析 熟知EasyNVR产品的小伙伴都知道,通过纯Web化的交互方式,只要配置出摄像机的IP.端口.用户名.密码等信息,就可以将地址进行通道配置完成,即可将设备接入.如果设备支持Onvif协议,E ...

  5. LeetCode_459. Repeated Substring Pattern

    459. Repeated Substring Pattern Easy Given a non-empty string check if it can be constructed by taki ...

  6. C# HashSet集合类型使用介绍

    1.HashSet集合 使用HashSet可以提高集合的运算.使用HashSet集合不自带排序方法,如果需要排序的需求可以参考使用List<T>集合配合Sort方法. HashSet的优势 ...

  7. docker swarm集群搭建及使用Portainer、shipyard

    一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1   localhost 192.168. ...

  8. 关于UiAutomator无法识别的元素

    1.关于没有name,没有ID的元素的定位---通用篇解题思路:因为没有name,id:其实剩下的选择已不多,要么xpath,要么className.xpath木有好印象(稳定性不高,加之1.0x后需 ...

  9. CentOS7-Docker 安装 Gitlab

    官方教程 https://docs.gitlab.com/omnibus/docker/ 搜索镜像 [root@master ~]# docker search gitlab 拉取镜像 [root@m ...

  10. linux查看openssh和openssl版本

    查看 openssh 版本命令 ssh -V 查看 openssl 版本命令 openssl version