Java 解析JSON,JSON-LIB jar包下载和使用。

JSON 2016-08-22 23:57:07 93195

这是我之前发布的一篇文章。发现在其他的地方下载不了相关的包。故再次整理了一下。

Java jar包下载:

Json-lib  的所有依赖Jar包单独下载。

  1. commons-lang-2.5.jar:点击下载commons-lang-2.5.jar
  2. commons-beanutils-1.8.0.jar:点击下载commons-beanutils-1.8.0.jar
  3. commons-collections-3.2.jar:点击下载commons-collections-3.2.1.jar
  4. commons-logging-1.1.1.jar:点击下载commons-logging-1.1.1.jar
  5. ezmorph-1.0.6.jar:点击下载ezmorph-1.0.6.jar
  6. JSON  工具在线解析:JSON在线工具

json-lib  的  maven  dependency 引入及Jar包下载:https://www.sojson.com/blog/101.html

代码使用Demo:

1.对象转JSON对象。

public static void main(String[] args) {
	Domain demo = new Domain(
			"在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)",
			"https://www.sojson.com/",
			"提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。");

	String objectToJSON = objectToJSON(demo);
	System.out.println(objectToJSON);
	
}

public static String objectToJSON(Domain demo) {
	return JSONObject.fromObject(demo).toString();
}
/**
 * 结果输出:
 
 {
    "description": "提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。",
    "title": "在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)",
    "url": "https://www.sojson.com/"
}
 
 */

2.Map转JSON对象。

public static void main(String[] args) {
	Map map = new HashMap();
	map.put("title", "在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)");
	map.put("url", "https://www.sojson.com/");
	map.put("description", "提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。");

	String objectToJSON = mapToJSON(map);
	System.out.println(objectToJSON);
	
}

public static String mapToJSON(Map map) {
	return JSONObject.fromObject(map).toString();
}
/**
 * 结果输出:
 {
    "description": "提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。",
    "title": "在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)",
    "url": "https://www.sojson.com/"
}
 
 */

3.对象和JSON之间的转换(JsonUtil)。

package snippet;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsDateJsonValueProcessor;
import net.sf.json.util.JSONUtils;

public class JsonUtil {

	/** 页面传至后台时,json数据在request的参数名称 */
public final static String JSON_ATTRIBUTE = "json";
public final static String JSON_ATTRIBUTE1 = "json1";
public final static String JSON_ATTRIBUTE2 = "json2";
public final static String JSON_ATTRIBUTE3 = "json3";
public final static String JSON_ATTRIBUTE4 = "json4";

/**
 * 从一个JSON 对象字符格式中得到一个java对象,形如: {"id" : idValue, "name" : nameValue,
 * "aBean" : {"aBeanId" : aBeanIdValue, ...}}
 * 
 * @param object
 * @param clazz
 * @return
 */
public static Object getDTO(String jsonString, Class clazz) {
	JSONObject jsonObject = null;
	try {
		setDataFormat2JAVA();
		jsonObject = JSONObject.fromObject(jsonString);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return JSONObject.toBean(jsonObject, clazz);
}

/**
 * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如: {"id" : idValue, "name" :
 * nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}, beansList:[{}, {},
 * ...]}
 * 
 * @param jsonString
 * @param clazz
 * @param map
 *            集合属性的类型 (key : 集合属性名, value : 集合属性类型class) eg: ("beansList" :
 *            Bean.class)
 * @return
 */
public static Object getDTO(String jsonString, Class clazz, Map map) {
	JSONObject jsonObject = null;
	try {
		setDataFormat2JAVA();
		jsonObject = JSONObject.fromObject(jsonString);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return JSONObject.toBean(jsonObject, clazz, map);
}

/**
 * 从一个JSON数组得到一个java对象数组,形如: [{"id" : idValue, "name" : nameValue}, {"id" :
 * idValue, "name" : nameValue}, ...]
 * 
 * @param object
 * @param clazz
 * @return
 */
public static Object[] getDTOArray(String jsonString, Class clazz) {
	setDataFormat2JAVA();
	JSONArray array = JSONArray.fromObject(jsonString);
	Object[] obj = new Object[array.size()];
	for (int i = 0; i < array.size(); i++) {
		JSONObject jsonObject = array.getJSONObject(i);
		obj[i] = JSONObject.toBean(jsonObject, clazz);
	}
	return obj;
}

/**
 * 从一个JSON数组得到一个java对象数组,形如: [{"id" : idValue, "name" : nameValue}, {"id" :
 * idValue, "name" : nameValue}, ...]
 * 
 * @param object
 * @param clazz
 * @param map
 * @return
 */
public static Object[] getDTOArray(String jsonString, Class clazz, Map map) {
	setDataFormat2JAVA();
	JSONArray array = JSONArray.fromObject(jsonString);
	Object[] obj = new Object[array.size()];
	for (int i = 0; i < array.size(); i++) {
		JSONObject jsonObject = array.getJSONObject(i);
		obj[i] = JSONObject.toBean(jsonObject, clazz, map);
	}
	return obj;
}

/**
 * 从一个JSON数组得到一个java对象集合
 * 
 * @param object
 * @param clazz
 * @return
 */
public static List getDTOList(String jsonString, Class clazz) {
	setDataFormat2JAVA();
	JSONArray array = JSONArray.fromObject(jsonString);
	List list = new ArrayList();
	for (Iterator iter = array.iterator(); iter.hasNext();) {
		JSONObject jsonObject = (JSONObject) iter.next();
		list.add(JSONObject.toBean(jsonObject, clazz));
	}
	return list;
}

/**
 * 从一个JSON数组得到一个java对象集合,其中对象中包含有集合属性
 * 
 * @param object
 * @param clazz
 * @param map
 *            集合属性的类型
 * @return
 */
public static List getDTOList(String jsonString, Class clazz, Map map) {
	setDataFormat2JAVA();
	JSONArray array = JSONArray.fromObject(jsonString);
	List list = new ArrayList();
	for (Iterator iter = array.iterator(); iter.hasNext();) {
		JSONObject jsonObject = (JSONObject) iter.next();
		list.add(JSONObject.toBean(jsonObject, clazz, map));
	}
	return list;
}

/**
 * 从json HASH表达式中获取一个map,该map支持嵌套功能 形如:{"id" : "johncon", "name" : "小强"}
 * 注意commons
 * -collections版本,必须包含org.apache.commons.collections.map.MultiKeyMap
 * 
 * @param object
 * @return
 */
public static Map getMapFromJson(String jsonString) {
	setDataFormat2JAVA();
	JSONObject jsonObject = JSONObject.fromObject(jsonString);
	Map map = new HashMap();
	for (Iterator iter = jsonObject.keys(); iter.hasNext();) {
		String key = (String) iter.next();
		map.put(key, jsonObject.get(key));
	}
	return map;
}

/**
 * 从json数组中得到相应java数组 json形如:["123", "456"]
 * 
 * @param jsonString
 * @return
 */
public static Object[] getObjectArrayFromJson(String jsonString) {
	JSONArray jsonArray = JSONArray.fromObject(jsonString);
	return jsonArray.toArray();
}

/**
 * 把数据对象转换成json字符串 DTO对象形如:{"id" : idValue, "name" : nameValue, ...}
 * 数组对象形如:[{}, {}, {}, ...] map对象形如:{key1 : {"id" : idValue, "name" :
 * nameValue, ...}, key2 : {}, ...}
 * 
 * @param object
 * @return
 */
public static String getJSONString(Object object) throws Exception {
	String jsonString = null;
	// 日期值处理器
	JsonConfig jsonConfig = new JsonConfig();
	jsonConfig.registerJsonValueProcessor(java.util.Date.class,
			new JsonDateValueProcessor());
	if (object != null) {
		if (object instanceof Collection || object instanceof Object[]) {
			jsonString = JSONArray.fromObject(object, jsonConfig)
					.toString();
		} else {
			jsonString = JSONObject.fromObject(object, jsonConfig)
					.toString();
		}
	}
	return jsonString == null ? "{}" : jsonString;
}

private static void setDataFormat2JAVA() {
	// 设定日期转换格式
	JSONUtils.getMorpherRegistry().registerMorpher(
			new DateMorpher(new String[] { "yyyy-MM-dd",
					"yyyy-MM-dd HH:mm:ss" }));
}

public static void main(String[] arg) throws Exception {
	String s = "{status : 'success'}";
	System.out.println(" object : " + JsonUtil.getJSONString(s));
	}
}

4.日期处理类

package snippet;

import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

/*
 * @author www.sojson.com
 * 创建日期 2008-9-10
 * json日期值处理器
 */
public class JsonDateValueProcessor implements JsonValueProcessor {

	private String format = "yyyy-MM-dd HH:mm:ss";

	public static void main(String[] args) {
		// 三解析如下例子
		String rowidString = "[{\"kl_id\":\"2\",\"kl_title\":\"Test date\",\"kl_content\":\"Test date\",\"kl_type\":\"1\",\"id\":\"1\"},{\"kl_id\":\"2\",\"kl_title\":\"Test\",\"kl_content\":\"Test\",\"kl_type\":\"1\",\"id\":\"2\"}]";

		JSONArray array = JSONArray.fromObject(rowidString);
		Object[] obj = new Object[array.size()];
		for (int i = 0; i < array.size(); i++) {
			JSONObject jsonObject = array.getJSONObject(i);
			System.out.println(jsonObject.get("kl_id"));

		}
	}

	public JsonDateValueProcessor() {

	}

	public JsonDateValueProcessor(String format) {
		this.format = format;
	}

	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
		return process(value, jsonConfig);
	}

	public Object processObjectValue(String key, Object value,
			JsonConfig jsonConfig) {
		return process(value, jsonConfig);
	}

	private Object process(Object value, JsonConfig jsonConfig) {
		if (value instanceof Date) {
			String str = new SimpleDateFormat(format).format((Date) value);
			return str;
		}
		return value == null ? null : value.toString();
	}

	public String getFormat() {
		return format;
	}

	public void setFormat(String format) {
		this.format = format;
	}

}

PS:

public static void main(String[] args) {
	//对于对象中有明确类型的对象属性,可不管;但对象中有集合属性的,由于类型不明确,所以要先明确类型:
	String jsonString = request.getParameter("json");
	//增加对象中的集合属性的类型以及对象元素中的对象属性的集合属性的类型
	Map clazzMap = new HashMap();
	//secondItems是FirstDTO里的集合属性
	clazzMap.put("secondItems", SecondDTO.class);
	//thirdItems是SecondDTO里的集合属性
	clazzMap.put("thirdItems", ThirdDTO.class);
	FirstDTO firstDTO = (FirstDTO)JsonUtil.getDTO(jsonString, FirstDTO.class, clazzMap); 
}


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/20.html

转载时必须以链接形式注明原始出处及本声明。


附件下载:

备注:点击文件名下载,附件源来自云端,只能在本站下载。复制下载链接无效。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
最新文章
HTTP/3 来了,您真的了解它么? 1055
当我谈 HTTP 时,我谈些什么? 8209
新浪短链(t.cn)最新申请官方API的方法讲解。 38728
QUIC / HTTP3 协议详细分析讲解 4176
恭喜那个做云存储的七牛云完成 F 轮 10 亿人民币的融资,开启新的云旅程 5620
Autojs怎么安全加密?Autojs在线加密工具注意事项。 17009
Java JSON 组件选型之 FastJson 为什么总有漏洞? 38283
使用七牛云存储实现图片API,自动删除图片方案合集 5669
神速ICP备案经验分享,ICP备案居然一天就通过了 6887
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 6489
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 556400
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 482669
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 459025
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 420343
Elasticsearch教程(四) elasticsearch head 插件安装和使用 309443
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 286968
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 175435
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 151124
Elasticsearch教程(一),全程直播(小白级别) 150972
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 117402
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...