Java后台 解析JSON的几个方法
1.对象转JSON对象。
public static void main(String[] args) {
Domain demo = new Domain(
"在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)",
"http://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": "http://www.sojson.com/"
} */
2.Map<string,object>转JSON对象。
public static void main(String[] args) {
Map map = new HashMap();
map.put("title", "在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)");
map.put("url", "http://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": "http://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);
}
Java后台 解析JSON的几个方法的更多相关文章
- java后台常用json解析工具问题小结
若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...
- fastJson java后台转换json格式数据
什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...
- fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...
- 使用Python解析JSON数据的基本方法
这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下: ----------------------------------- ...
- JAVA简便解析json文件
JAVA简便解析json文件 首先放上我要解析的json文件: { "resultcode":"200", "reason":"S ...
- Golang解析json的几种方法
Golang解析json的几种方法 概要 使用Golang调用其它平台API接口时总会被多层的json串给恶心到,我记录一下自己解析json的几种方法. 一.自带的json包 func JsonUnm ...
- 【Jsoup】Jsoup解析Html标签(Java后台解析)
中文API网站(下载地址): http://www.open-open.com/jsoup/ 有时候编辑器传到后台的内容是带Html标签的,或者有时候需要形成一个完整的Html文档,也或者需要解析其中 ...
- Android中解析JSON格式数据常见方法合集
待解析的JSON格式的文件如下: [{"id":"5", "version":"1.0", "name&quo ...
- 解析JSON的两种方法eval()和JSON.parse()
解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...
随机推荐
- 20155218 2016-2017-2 《Java程序设计》第6周学习总结
20155218 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. dump()方 ...
- No cache or cacheManager properties have been set. Authorization cache cannot be obtained.
20235 [http-bio-8080-exec-10] INFO o.a.shiro.realm.AuthorizingRealm - No cache or cacheManager prope ...
- QGIS 2014年7月18日版本
4. Building on Windows 4.1. Building with Microsoft Visual Studio This section describes how to buil ...
- MySQL中不允许使用列别名作为查询条件
在MySQL中有个特殊的规定,即不允许使用列别名作为查询条件.比如有下面一个表: select ID, title, concept, conceptLength, ...
- delphi 6数据库连接之长短模式(sqlserver)
delphi 6数据库连接之长短模式(sqlserver) 标签: delphi数据库 2015-08-12 20:59 351人阅读 评论(0) 收藏 举报 分类: delphi(3) 版权声明 ...
- Spring Boot 2 实践记录之 Powermock 和 SpringBootTest
由于要代码中使用了 Date 类生成实时时间,单元测试中需要 Mock Date 的构造方法,以预设其行为,这就要使用到 PowerMock 在 Spring Boot 的测试套件中,需要添加 @Ru ...
- python 应用 base64、hmac、hashlib包实现:MD5编码 base64编码解码、SHA256编码、urlsafe_b64encode编码等等基本所有的加密签名的方法
用python做HTTP接口自动化测试的时候,接口的很多参数是经过各种编码加密处理后在传到后台的,这里列举出python实现 应用 base64.hmac.hashlib包实现:md5编码 sha1编 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (三)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- The rapid development platform upgrade, leave the time to yourself, the work is lost to the soft platform
Bring me back to your home. Please leave your work behind! Soft agile development framework V7.0 new ...
- InnoDB之锁机制
前两天听了姜老大关于InnoDB中锁的相关培训,刚好也在看这方面的知识,就顺便利用时间把这部分知识做个整理,方便自己理解.主要分为下面几个部分 1. InnoDB同步机制 InnoDB存储引擎有两种同 ...