Java操作JSON数据(1)--JSON-lib操作JSON数据
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、引入依赖
- <dependency>
- <groupId>net.sf.json-lib</groupId>
- <artifactId>json-lib</artifactId>
- <version>2.4</version>
- <classifier>jdk15</classifier>
- </dependency>
2、序列化
- public static String serialize() {
- MyBean bean = new MyBean();
- bean.setS("测试字符串");
- Calendar calendar = Calendar.getInstance();
- calendar.add(Calendar.HOUR_OF_DAY, -1);
- bean.setD(calendar.getTime());
- JsonConfig config = new JsonConfig();
- //防止自包含
- config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
- //Date类型转化
- config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
- //过滤s3字段
- config.setExcludes(new String[]{"s3"});
- //过滤值为null的字段
- config.setJsonPropertyFilter(new PropertyFilter() {
- @Override
- public boolean apply(Object arg0, String arg1, Object value) {
- return value == null;
- }
- });
- List<MyBean> list = new ArrayList<MyBean>();
- list.add(bean);
- Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
- map.put("data", list);
- JSON json = JSONSerializer.toJSON(map, config);
- String result = json.toString();
- System.out.println(json.toString());
- return result;
- }
3、反序列化
- public static void deserialize() {
- try {
- //处理日期类型
- JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"yyyy-MM-dd HH:mm:ss"}));
- String s = serialize();
- Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
- classMap.put("data", MyBean.class);
- Map<String, List<MyBean>> map = (Map<String, List<MyBean>>) JSONObject.toBean(JSONObject.fromObject(s), Map.class, classMap);
- System.out.println(map);
- //直接通过api获取相应数据
- JSONObject obj = JSONObject.fromObject(s);
- JSONArray data = obj.getJSONArray("data");
- JSONObject bean = data.getJSONObject(0);
- System.out.println(bean.getString("s"));
- //...
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
4、完整例子
- package com.inspur.demo.json;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import net.sf.ezmorph.object.DateMorpher;
- import net.sf.json.JSON;
- import net.sf.json.JSONArray;
- import net.sf.json.JSONObject;
- import net.sf.json.JSONSerializer;
- import net.sf.json.JsonConfig;
- import net.sf.json.processors.JsonValueProcessor;
- import net.sf.json.util.CycleDetectionStrategy;
- import net.sf.json.util.JSONUtils;
- import net.sf.json.util.PropertyFilter;
- /**
- * JSON-lib操作JSON数据
- */
- public class JsonLibCase {
- /**
- * 序列化
- */
- public static String serialize() {
- MyBean bean = new MyBean();
- bean.setS("测试字符串");
- Calendar calendar = Calendar.getInstance();
- calendar.add(Calendar.HOUR_OF_DAY, -1);
- bean.setD(calendar.getTime());
- JsonConfig config = new JsonConfig();
- //防止自包含
- config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
- //Date类型转化
- config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
- //过滤s3字段
- config.setExcludes(new String[]{"s3"});
- //过滤值为null的字段
- config.setJsonPropertyFilter(new PropertyFilter() {
- @Override
- public boolean apply(Object arg0, String arg1, Object value) {
- return value == null;
- }
- });
- List<MyBean> list = new ArrayList<MyBean>();
- list.add(bean);
- Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
- map.put("data", list);
- JSON json = JSONSerializer.toJSON(map, config);
- String result = json.toString();
- System.out.println(json.toString());
- return result;
- }
- /**
- * 反序列化
- */
- public static void deserialize() {
- try {
- //处理日期类型
- JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"yyyy-MM-dd HH:mm:ss"}));
- String s = serialize();
- Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
- classMap.put("data", MyBean.class);
- Map<String, List<MyBean>> map = (Map<String, List<MyBean>>) JSONObject.toBean(JSONObject.fromObject(s), Map.class, classMap);
- System.out.println(map);
- //直接通过api获取相应数据
- JSONObject obj = JSONObject.fromObject(s);
- JSONArray data = obj.getJSONArray("data");
- JSONObject bean = data.getJSONObject(0);
- System.out.println(bean.getString("s"));
- //...
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- serialize();
- deserialize();
- }
- static class DateJsonValueProcessor implements JsonValueProcessor {
- @Override
- public Object processArrayValue(Object value, JsonConfig arg1) {
- return process(value);
- }
- @Override
- public Object processObjectValue(String key, Object value, JsonConfig arg2) {
- return process(value);
- }
- private Object process(Object value) {
- try {
- if (value instanceof Date) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- return sdf.format((Date) value);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return value == null ? "" : value.toString();
- }
- }
- }
JsonLibCase
- package com.inspur.demo.json;
- import java.util.Arrays;
- import java.util.Date;
- public class MyBean {
- private String s = "字符串";
- private String s2;
- private String s3 = "字符串3";
- private int i = 123;
- private Integer i2;
- private char c = '到';
- private char[] c2 = new char[]{'a', 'b'};
- private Date d = new Date();
- private Date[] d2 = new Date[]{new Date(), new Date()};
- public String getS() {
- return s;
- }
- public void setS(String s) {
- this.s = s;
- }
- public String getS2() {
- return s2;
- }
- public void setS2(String s2) {
- this.s2 = s2;
- }
- public String getS3() {
- return s3;
- }
- public void setS3(String s3) {
- this.s3 = s3;
- }
- public int getI() {
- return i;
- }
- public void setI(int i) {
- this.i = i;
- }
- public Integer getI2() {
- return i2;
- }
- public void setI2(Integer i2) {
- this.i2 = i2;
- }
- public char getC() {
- return c;
- }
- public void setC(char c) {
- this.c = c;
- }
- public char[] getC2() {
- return c2;
- }
- public void setC2(char[] c2) {
- this.c2 = c2;
- }
- public Date getD() {
- return d;
- }
- public void setD(Date d) {
- this.d = d;
- }
- public Date[] getD2() {
- return d2;
- }
- public void setD2(Date[] d2) {
- this.d2 = d2;
- }
- @Override
- public String toString() {
- return "MyBean [s=" + s + ", s2=" + s2 + ", s3=" + s3 + ", i=" + i + ", i2=" + i2 + ", c=" + c + ", c2="
- + Arrays.toString(c2) + ", d=" + d + ", d2=" + Arrays.toString(d2) + "]";
- }
- }
MyBean
Java操作JSON数据(1)--JSON-lib操作JSON数据的更多相关文章
- Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)
日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...
- Java 常见数据交换格式——xml、json、yaml
目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...
- IO编程、操作文件或目录、序列化、JSON
IO中指Input/Output,即输入和输出:涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口 1.由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,存在速度严重不匹配问题.eg ...
- 用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库
前言 在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一个具体的 struct:如果想要获取值就需要先做断言将其转换为 map 或 ...
- Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法
前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...
- Java基础知识强化之IO流笔记57:数据输入输出流(操作基本数据类型)
1. 数据输入输出流(操作基本数据类型) (1)数据输入流:DataInputStream DataInputStream(InputStream in) (2)数据输出流:DataOutputStr ...
- Java获取http和https协议返回的json数据
现在很多公司都是将数据返回一个json,而且很多第三方接口都是返回json数据,而且还需要使用到http协议,http协议是属于为加密的协议,而https协议需要SSL证书,https是将用户返回的信 ...
- 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 ...
- 在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行
在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行
- json学习系列(8)JSON与JAVA数据的相互转换实例
一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author ...
随机推荐
- Nexus Repository Manager OSS 3.x 安装配置
前言想要使用maven搭建项目,但是国内的网络环境可以想象,还有公司自己开发的jar包等问题,所以需要搭建一个maven的私服,这样便于管理. 找了一些教程,顺便记下来,当做笔记. 本文以Window ...
- node.js GET与POST请求
node.js GET与POST请求 转 http://www.voidcn.com/article/p-ncglaiqx-bdx.html 标签 get post node.js 栏目 Node.j ...
- vue-cli3项目关闭烦人的代码检测
参考博客:https://blog.csdn.net/e1172090224/article/details/99636767 vue.config.js module.exports = { lin ...
- EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案之使用RTSP流判断摄像机设备是否在线以及快照抓取
背景分析 熟知EasyNVR产品的小伙伴都知道,通过纯Web化的交互方式,只要配置出摄像机的IP.端口.用户名.密码等信息,就可以将地址进行通道配置完成,即可将设备接入.如果设备支持Onvif协议,E ...
- LeetCode_459. Repeated Substring Pattern
459. Repeated Substring Pattern Easy Given a non-empty string check if it can be constructed by taki ...
- C# HashSet集合类型使用介绍
1.HashSet集合 使用HashSet可以提高集合的运算.使用HashSet集合不自带排序方法,如果需要排序的需求可以参考使用List<T>集合配合Sort方法. HashSet的优势 ...
- docker swarm集群搭建及使用Portainer、shipyard
一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1 localhost 192.168. ...
- 关于UiAutomator无法识别的元素
1.关于没有name,没有ID的元素的定位---通用篇解题思路:因为没有name,id:其实剩下的选择已不多,要么xpath,要么className.xpath木有好印象(稳定性不高,加之1.0x后需 ...
- CentOS7-Docker 安装 Gitlab
官方教程 https://docs.gitlab.com/omnibus/docker/ 搜索镜像 [root@master ~]# docker search gitlab 拉取镜像 [root@m ...
- linux查看openssh和openssl版本
查看 openssh 版本命令 ssh -V 查看 openssl 版本命令 openssl version