JSON 解析工具的封装(FastJSON-->Java)
作者QQ:1095737364 QQ群:123300273 欢迎加入!
1.添加依赖包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
2.代码
package com.yys.common.util; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.sun.tools.doclets.formats.html.SourceToHTMLConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* User: 杨永生
* Date: 9:24 2017/9/6
* Email: kevin@hiibook.com
*/
public class FastJsonUtils {
private final static Logger logger = LoggerFactory.getLogger(FastJsonUtils.class);
private static SerializeConfig config; static {
config = new SerializeConfig();
config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
config.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
} private static final SerializerFeature[] features = {
SerializerFeature.DisableCircularReferenceDetect,//打开循环引用检测,JSONField(serialize = false)不循环
SerializerFeature.WriteDateUseDateFormat,//默认使用系统默认 格式日期格式化
SerializerFeature.WriteMapNullValue, //输出空置字段
SerializerFeature.WriteNullListAsEmpty,//list字段如果为null,输出为[],而不是null
SerializerFeature.WriteNullNumberAsZero,// 数值字段如果为null,输出为0,而不是null
SerializerFeature.WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而不是null
SerializerFeature.WriteNullStringAsEmpty//字符类型字段如果为null,输出为"",而不是null
}; /**
* 返回Json字符串里面包含的一个对象
*
* @param jsonStr :{"city":"china","map1":[{"age":"28","name":"yys"}]}
* @param list_str :map1
* @param clazz :Map.class,或者其他对象
* @param <T> :Map
* @return :List<Map>
*/
public static final <T> List<T> json2childList(String jsonStr, String list_str,
Class<T> clazz) {
JSONObject jsonobj = JSON.parseObject(jsonStr);
if (jsonobj == null) {
return null;
}
Object obj = jsonobj.get(list_str);
if (obj == null) {
return null;
}
if (obj instanceof JSONArray) {
JSONArray jsonarr = (JSONArray) obj;
List<T> list = new ArrayList<T>();
for (int i = 0; i < jsonarr.size(); i++) {
list.add(jsonarr.getObject(i, clazz));
}
return list;
}
return null;
} /**
* 返回Json字符串里面包含的一个对象
*
* @param jsonStr :{"department":{"id":"1","name":"生产部"},"password":"admin","username":"admin"}
* @param obj_str :department
* @param clazz :Map.class,或者其他对象
* @param <T> :Map
* @return
*/
public static final <T> T json2childObj(String jsonStr, String obj_str,
Class<T> clazz) {
JSONObject jsonobj = JSON.parseObject(jsonStr);
if (jsonobj == null) {
return null;
} Object obj = jsonobj.get(obj_str);
if (obj == null) {
return null;
} if (obj instanceof JSONObject) {
return jsonobj.getObject(obj_str, clazz);
} else {
logger.info(obj.getClass() + "");
} return null;
} /**
* json 转换成对象
*
* @param jsonStr
* @param clazz
* @param <T>
* @return
*/
public static final <T> T json2obj(String jsonStr, Class<T> clazz) {
T t = null;
try {
t = JSON.parseObject(jsonStr, clazz);
} catch (Exception e) {
logger.error("json字符串转换失败!" + jsonStr, e);
}
return t;
} /**
* 对象转换成json字符串(带有格式化输出)
*
* @param object 要转换的对象
* @param prettyFormat 是否格式化json字符串,输出带有换行和缩进的字符串
* @return 返回一个json 字符串数组
*/
public static final String obj2json(Object object, boolean prettyFormat) {
return JSON.toJSONString(object, prettyFormat);
} /**
* 对象转换成json字符串
*
* @param object 要转换的对象
* @return 返回一个json 字符串数组
*/
public static final String obj2jsonByFeatures(Object object) {
return JSON.toJSONString(object,config,features);
}
/**
* 对象转换成json字符串
*
* @param object 要转换的对象
* @return 返回一个json 字符串数组
*/
public static final String obj2json(Object object) {
return JSON.toJSONString(object,config);
} /**
* json 字符串转换成原始的Object对象
*
* @param jsonStr
* @return
*/
public static final Object json2obj(String jsonStr) {
return JSON.parse(jsonStr);
} /**
* json字符串转换成list
*
* @param jsonStr Json字符串
* @param clazz 要转换的class
* @param <T>返回的泛型类型
* @return 返回的<T>泛型类型
*/
public static <T> List<T> json2List(String jsonStr, Class<T> clazz) {
List<T> list = new ArrayList<T>();
try {
list = JSON.parseArray(jsonStr, clazz);
} catch (Exception e) {
logger.error("json字符串转List失败!" + jsonStr, e);
}
return list;
} /**
* json字符串转换成Map
*
* @param jsonStr Json字符串
* @return Map
*/
public static Map<String, Object> json2Map(String jsonStr) {
try {
return JSON.parseObject(jsonStr, Map.class);
} catch (Exception e) {
logger.error("json字符串转换失败!" + jsonStr, e);
}
return null;
} /**
* json 转换成list<map>
*
* @param jsonString
* @return
*/
public static List<Map<String, Object>> json2ListkeyMap(String jsonString) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
list = JSON.parseObject(jsonString,
new TypeReference<List<Map<String, Object>>>() {
});
} catch (Exception e) {
logger.error("json字符串转map失败", e);
}
return list;
} }
JSON 解析工具的封装(FastJSON-->Java)的更多相关文章
- JSON 解析工具的封装(Java)
JSON 解析工具的封装(Java) 一直想有一个属于自己的JSON工具,今天终于弄好了..... 1.添加pom依赖包 <!--json解析--> <dependency> ...
- java后台常用json解析工具问题小结
若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...
- JSON解析工具比较,主要GSON和FastJSON
JSON解析工具比较,主要GSON和FastJSON 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确 ...
- [转] 各种Json解析工具比较 - json-lib/Jackson/Gson/FastJson
JSON技术的调研报告 一 .各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括com ...
- Java:JSON解析工具-org.json
一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...
- 自定义Json解析工具
此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...
- Json解析工具Jackson(使用注解)
原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- JSON解析工具-org.json使用教程
转自:http://www.open-open.com/lib/view/open1381566882614.html 一.简介 org.json是Java常用的Json解析工具,主要提供JSONO ...
随机推荐
- Swift5 语言指南(二十三) 协议
甲协议定义的该适合特定任务或片的功能的方法,属性和其他要求的蓝图.然后,可以通过类,结构或枚举来采用该协议,以提供这些要求的实际实现.任何满足协议要求的类型都被认为符合该协议. 除了指定符合类型必须实 ...
- Swift5 语言参考(六) 声明
一个声明引入了一个新的名称或构建到你的程序.例如,您使用声明来引入函数和方法,引入变量和常量,以及定义枚举,结构,类和协议类型.您还可以使用声明来扩展现有命名类型的行为,并将符号导入到其他地方声明的程 ...
- Android v7包下Toolbar和ActionBarActivity实现后退导航效果
android.support.v7包下的ToolBar和ActionBarActivity,均自带后退导航按钮,只是要手动开启,让它显示出来.先来看看ToolBar,页面前台代码: <andr ...
- TakePhoto实现拍照得到图片和从相册得到图片
在学郭霖大神的第一行代码的时候,学到利用相机拍照和从本地相册取照片的那一小节的时候,代码写出来但是出了很多问题,APP老是崩溃,一番百度最终还是没有找到解决办法 无奈只能用别人现成的轮子了,然后就发现 ...
- 通过修改CR0寄存器绕过SSDT驱动保护
为了安全起见,Windows XP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT.IDT等.但这种方法很容易被绕过,我们只要将这些部分修改为可写 ...
- 微信应用号来了,微信小程序开发教程!
关注,QQ群,微信应用号社区 511389428,511389428 微信应用开放的服务和组件包含如下: 视图容器:视图(View).滚动视图.Swiper 基础内容:图标.文本.进度条 表单组件:按 ...
- tomcat8 进入不了Manager App 界面 403 Access Denied
准备 1.注释掉context.xml中的value属性 使用下面的命令: vim /usr/local/tomcats/tomcat-daily/webapps/manager/META-INF/c ...
- 【转】kafka集群搭建
转:http://www.cnblogs.com/luotianshuai/p/5206662.html Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否 ...
- MySQL复制以及调优
一. 简介 MySQL自带复制方案,带来好处有: 数据备份. 负载均衡. 分布式数据. 概念介绍: 主机(master):被复制的数据库. 从机(slave):复制主机数据的数据库. 复制步骤: (1 ...
- WPF 数据绑定 使用Code First with Database
一.准备工作 1.开发工具 Visual Studio 2013 2.安装 Entity Framework 6 Tools for Visual Studio 2012 & 2013 来实现 ...