总结的一些json格式和对象/String/Map/List等的互转工具类
总结的一些json格式和对象/String/Map/List等的互转工具类,有需要的可以看看,需要引入jackson-core-asl-1.7.1.jar、jackson-jaxrs-1.7.1.jar、jackson-mapper-asl-1.7.1.jar这三个jar包
- package com.zuidaima.util.json;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.Reader;
- import java.io.Writer;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.codehaus.jackson.JsonNode;
- import org.codehaus.jackson.map.DeserializationConfig;
- import org.codehaus.jackson.map.ObjectMapper;
- import org.codehaus.jackson.map.annotate.JsonSerialize;
- import org.codehaus.jackson.map.type.TypeFactory;
- public class JsonUtil {
- private static ObjectMapper mapper = new ObjectMapper();
- static{
- /**
- * 反序列化时忽略多余的属性
- */
- mapper.getDeserializationConfig().set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- /**
- * 忽略Null的值,节省空间.
- */
- mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
- /**
- * 忽略Default值木有变化的属性,更节省空间,用于接收方有相同的Class
- * 如int属性初始值为0,那么这个属性将不会被序列化
- */
- mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);
- }
- /**
- *
- * @Title: isJSON
- * @author kaka
- * @Description: 判断 jsonString是否可以转换成json格式
- * @param @param jsonString
- * @param @return
- * @return boolean
- * @throws
- */
- public static boolean isJSON(String jsonString) {
- return mapper.canSerialize(HashMap.class);
- }
- public static <V> Map<String, V> toMap(String content,Class<? extends V> clazz) throws Exception {
- return mapper.readValue(content, TypeFactory.mapType(HashMap.class,String.class, clazz));
- }
- public static <V> Map<String, V> toMap(InputStream is,Class<? extends V> clazz) throws Exception {
- return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz));
- }
- public static <V> Map<String, V> toMap(Reader is, Class<? extends V> clazz)throws Exception {
- return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz));
- }
- public static <V> Map<String, V> toMap(URL is, Class<? extends V> clazz)throws Exception {
- return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz));
- }
- public static <E> List<E> toList(String content, Class<? extends E> clazz)throws Exception {
- return jsonToList(content, clazz);
- }
- /**
- *
- * @Title: jsonToList
- * @author kaka
- * @Description: json转list , List的元素类型,会一并转换完成 如List<User>
- * @param @param <E>
- * @param @param content
- * @param @param clazz
- * @param @return 元素类型为E的List
- * @param @throws Exception
- * @return List<E>
- * @throws
- */
- public static <E> List<E> jsonToList(String content,Class<? extends E> clazz) throws Exception {
- return mapper.readValue(content, TypeFactory.collectionType(ArrayList.class, clazz));
- }
- /**
- *
- * @Title: jsonToIntArray
- * @author kaka
- * @Description: json转整形数组
- * @param @param content
- * @param @return
- * @param @throws Exception
- * @return Integer[]
- * @throws
- */
- public static Integer[] jsonToIntArray(String content) throws Exception {
- return jsonToArray(content, Integer.class);
- }
- public static Integer[] jsonToIntArray(String content,String key) throws Exception {
- return jsonToArray(content, key, Integer.class);
- }
- /**
- *
- * @Title: jsonToArray
- * @author kaka
- * @Description: json转对象数组
- * @param @param <E>
- * @param @param content
- * @param @param clazz 数组中的对象类型
- * @param @return E类型的数组,如User[]
- * @param @throws Exception
- * @return E[]
- * @throws
- */
- public static <E> E[] jsonToArray(String content, Class<? extends E> clazz)throws Exception {
- if(content != null){
- return mapper.readValue(content, TypeFactory.arrayType(clazz));
- }else{
- return null;
- }
- }
- /**
- *
- * @Title: fromJsonToObject
- * @author kaka
- * @Description: json转java对象,为兼容原util类
- * @param @param <T>
- * @param @param content
- * @param @param clazz 目标类型
- * @param @return
- * @param @throws Exception
- * @return T 返回类型为T的对象
- * @throws
- */
- public static <T> T fromJsonToObject(String content,Class<? extends T> clazz) throws Exception {
- return jsonToObject(content, clazz);
- }
- public static <T> T jsonToObject(String content, Class<? extends T> clazz)throws Exception {
- return mapper.readValue(content, clazz);
- }
- /**
- *
- * @Title: jsonToObject
- * @author kaka
- * @Description: 一个jsonStr包含多个java对象,取其中一个转化为java对象的方法
- * @param @param <T>
- * @param @param content json格式的字符串
- * @param @param key 要转换的子json串的key
- * @param @param clazz 目标类型
- * @param @return 返回类型为T的对象
- * @param @throws Exception
- * @return T
- * @throws
- */
- public static <T> T jsonToObject(String content, String key,Class<? extends T> clazz) throws Exception {
- JsonNode rootNode = mapper.readValue(content, JsonNode.class);
- JsonNode path = rootNode.path(key);
- if(!path.isMissingNode()){
- return jsonToObject(path.toString(), clazz);
- }else{
- return null;
- }
- }
- public static Integer getInt(String content, String key) throws Exception {
- JsonNode rootNode = mapper.readValue(content, JsonNode.class);
- JsonNode path = rootNode.path(key);
- if(!path.isMissingNode()){
- return jsonToObject(path.toString(), Integer.class);
- }else{
- return null;
- }
- }
- public static String getString(String content, String key) throws Exception {
- JsonNode rootNode = mapper.readValue(content, JsonNode.class);
- JsonNode path = rootNode.path(key);
- if(!path.isMissingNode()){
- return jsonToObject(rootNode.path(key).toString(), String.class);
- }else{
- return null;
- }
- }
- public static Date getDate(String content, String key) throws Exception {
- JsonNode rootNode = mapper.readValue(content, JsonNode.class);
- JsonNode path = rootNode.path(key);
- if(!path.isMissingNode()){
- return jsonToObject(path.toString(), Date.class);
- }else{
- return null;
- }
- }
- /**
- * 一个jsonStr包含多个java对象,将指定的key的json转化为对象数组的方法
- * @param content 原始的json串
- * @param key 要转换的部分
- * @param clazz 目标类型
- * @return 目标类型的对象数组
- * @throws Exception
- */
- public static <E> E[] jsonToArray(String content, String key,Class<? extends E> clazz) throws Exception {
- JsonNode rootNode = mapper.readValue(content, JsonNode.class);
- JsonNode path = rootNode.path(key);
- if(!path.isMissingNode()){
- return jsonToArray(rootNode.path(key).toString(), clazz);
- }else{
- return null;
- }
- }
- public static Integer[] jsonToArray(String content, String key) throws Exception {
- JsonNode rootNode = mapper.readValue(content, JsonNode.class);
- JsonNode path = rootNode.path(key);
- if(!path.isMissingNode()){
- return jsonToArray(path.toString(), Integer.class);
- }else{
- return null;
- }
- }
- /**
- *
- * @Title: jsonToList
- * @author kaka
- * @Description: 一个jsonStr包含多个java对象,将指定的key的json转化为List<E>的方法
- * @param @param <E>
- * @param @param content 原始的json串
- * @param @param key 要转换的那部分json
- * @param @param clazz 目标类型
- * @param @return 元素为目标类型的List
- * @param @throws Exception
- * @return List<E>
- * @throws
- */
- public static <E> List<E> jsonToList(String content, String key,Class<? extends E> clazz) throws Exception {
- JsonNode rootNode = mapper.readValue(content, JsonNode.class);
- JsonNode path = rootNode.path(key);
- if(!path.isMissingNode()){
- return toList(path.toString(), clazz);
- }else{
- return null;
- }
- }
- /**
- *
- * @Title: toJson
- * @author kaka
- * @Description: 对象转化成json,已知问题 A a B b b中有a,a中有b , 如果a和b同在一个o中将不能正常转化
- * @param @param o 要转换的对象
- * @param @return json格式的字符串
- * @param @throws Exception
- * @return String
- * @throws
- */
- public static String toJson(Object o) throws Exception {
- return mapper.writeValueAsString(o);
- }
- /**
- *
- * @Title: toJson
- * @author kaka
- * @Description: 转换成json串到out
- * @param @param out
- * @param @param o
- * @param @throws Exception
- * @return void
- * @throws
- */
- public static void toJson(OutputStream out, Object o) throws Exception {
- mapper.writeValue(out, o);
- }
- /**
- *
- * @Title: toJson
- * @author kaka
- * @Description: 转换成json串到writer
- * @param @param out
- * @param @param o
- * @param @throws Exception
- * @return void
- * @throws
- */
- public static void toJson(Writer out, Object o) throws Exception {
- mapper.writeValue(out, o);
- }
- public static String map2Json(Map map) throws Exception{
- return toJson(map);
- }
- /**
- *
- * @Title: formatJson
- * @author kaka
- * @Description: json字符串的格式化
- * @param @param json
- * @param @param fillStringUnit
- * @param @return
- * @return String
- * @throws
- */
- public static String formatJson(String json, String fillStringUnit) {
- if (json == null || json.trim().length() == 0) {
- return null;
- }
- int fixedLenth = 0;
- ArrayList<String> tokenList = new ArrayList<String>();
- {
- String jsonTemp = json;
- //预读取
- while (jsonTemp.length() > 0) {
- String token = getToken(jsonTemp);
- jsonTemp = jsonTemp.substring(token.length());
- token = token.trim();
- tokenList.add(token);
- }
- }
- for (int i = 0; i < tokenList.size(); i++) {
- String token = tokenList.get(i);
- int length = token.getBytes().length;
- if (length > fixedLenth && i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) {
- fixedLenth = length;
- }
- }
- StringBuilder buf = new StringBuilder();
- int count = 0;
- for (int i = 0; i < tokenList.size(); i++) {
- String token = tokenList.get(i);
- if (token.equals(",")) {
- buf.append(token);
- doFill(buf, count, fillStringUnit);
- continue;
- }
- if (token.equals(":")) {
- buf.append(" ").append(token).append(" ");
- continue;
- }
- if (token.equals("{")) {
- String nextToken = tokenList.get(i + 1);
- if (nextToken.equals("}")) {
- i++;
- buf.append("{ }");
- } else {
- count++;
- buf.append(token);
- doFill(buf, count, fillStringUnit);
- }
- continue;
- }
- if (token.equals("}")) {
- count--;
- doFill(buf, count, fillStringUnit);
- buf.append(token);
- continue;
- }
- if (token.equals("[")) {
- String nextToken = tokenList.get(i + 1);
- if (nextToken.equals("]")) {
- i++;
- buf.append("[ ]");
- } else {
- count++;
- buf.append(token);
- doFill(buf, count, fillStringUnit);
- }
- continue;
- }
- if (token.equals("]")) {
- count--;
- doFill(buf, count, fillStringUnit);
- buf.append(token);
- continue;
- }
- buf.append(token);
- //左对齐
- if (i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) {
- int fillLength = fixedLenth - token.getBytes().length;
- if (fillLength > 0) {
- for(int j = 0; j < fillLength; j++) {
- buf.append(" ");
- }
- }
- }
- }
- return buf.toString();
- }
- private static String getToken(String json) {
- StringBuilder buf = new StringBuilder();
- boolean isInYinHao = false;
- while (json.length() > 0) {
- String token = json.substring(0, 1);
- json = json.substring(1);
- if (!isInYinHao &&
- (token.equals(":") || token.equals("{") || token.equals("}")
- || token.equals("[") || token.equals("]")
- || token.equals(","))) {
- if (buf.toString().trim().length() == 0) {
- buf.append(token);
- }
- break;
- }
- if (token.equals("\\")) {
- buf.append(token);
- buf.append(json.substring(0, 1));
- json = json.substring(1);
- continue;
- }
- if (token.equals("\"")) {
- buf.append(token);
- if (isInYinHao) {
- break;
- } else {
- isInYinHao = true;
- continue;
- }
- }
- buf.append(token);
- }
- return buf.toString();
- }
- private static void doFill(StringBuilder buf, int count, String fillStringUnit) {
- buf.append("\n");
- for (int i = 0; i < count; i++) {
- buf.append(fillStringUnit);
- }
- }
- }
引用原文:https://blog.csdn.net/springmvc_springdata/article/details/44056043
写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!
如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!
总结的一些json格式和对象/String/Map/List等的互转工具类的更多相关文章
- JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面
将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面 导入jar包: 编写:po(bean)代码: package com.west.webcourse.po; /** * 第 ...
- JSon_零基础_005_将po(bean)对象转换为JSon格式的对象字符串,返回给界面
将po(bean)对象转换为JSon格式的对象字符串,返回给界面 导入jar包: 编写po(bean)类: package com.west.webcourse.po; /** * 第01步:编写be ...
- JSon_零基础_004_将Set集合对象转换为JSon格式的对象字符串,返回给界面
将Set集合对象转换为JSon格式的对象字符串,返回给界面 需要导入的jar包: 编写:servlet: package com.west.webcourse.servlet; import java ...
- JSon_零基础_003_将Map集合对象转换为JSon格式的对象字符串,返回给界面
将Map集合对象转换为JSon格式的对象字符串,返回给界面 需导入的jar包: 编写servlet: package com.west.webcourse.servlet; import java.i ...
- JSon_零基础_002_将List类型数组转换为JSon格式的对象字符串,返回给界面
将List类型数组转换为JSon格式的对象字符串,返回给界面 所需要导入的包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * ...
- 把普通对象转换成json格式的对象
1.什么叫做JSON?JSON只是一种数据格式(它不是一种新的数据类型) var obj = {name: "中国", age: 5000};//->普通格式的对象 var ...
- Jackson 对象与json数据互转工具类JacksonUtil
1,User对象 package com.st.json; import java.util.Date; /** * @Description: JSON序列化和反序列化使用的User类 * @aut ...
- Json格式转化为string格式
今天在学习Jsonp的时候,想通过服务端返回一段json数据,因为使用的服务端是NodeJs,那么就需要在js文件中实现返回json.(这里不懂的同学,可以先了解一下NodeJs的基础概念,在这里,我 ...
- JavaScript中,JSON格式的字符串与JSON格式的对象相互转化
前言:JSON是一个独立于任何语言的数据格式,因此,严格来说,没有“JSON对象”和“JSON字符串”这个说法(然而”菜鸟教程“和”W3school“使用了“JSON对象”和“JSON字符串”这个说法 ...
随机推荐
- 160304-02、JS 中如何判断null 和undefined
JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的用法: var exp = undef ...
- Oracle涂抹oracle学习笔记第10章Data Guard说,我就是备份
DG 是备份恢复工具,但是更加严格的意义它是灾难恢复 Data Guard是一个集合,由一个Primary数据库及一个或者多个Standby数据库组成,分两类逻辑Standby和物理Standby 1 ...
- 20165330 2017-2018-2《Java程序设计》课程总结
20165330 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:做中学learning by doing个人感想及学习基础 ...
- 剑指Offer——把二叉树打印成多行
题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 分析: 二叉树的层次遍历,利用队列. 代码: /* struct TreeNode { int val; struct T ...
- Divisibility by Eight---cf550C(被8整除 暴力)
题目链接:http://codeforces.com/problemset/problem/550/C 题意是给你一个不操过100位的数,问删除m位之后,问剩下的数不改变顺序能被8整除的数存在不存在: ...
- java-mybaits-00601-查询缓存-一级缓存、二级缓存
1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存. 在操作数据库时需要构造 sql ...
- Python学习笔记(一)数据类型
一.整型和浮点型 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样 age=10 num=-35 score=98.8 二.布尔类型 布尔值和布尔代数的表示 ...
- JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配
如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JD ...
- MySQL协议分析(2)
MySQL协议分析(2) 此阶段是在压缩传输无加密条件下进行的协议分析 思路 结合Oracle官网的说明和自己用wireshark加python进行数据包分析 步骤 客户端与服务器端是否压缩的协商阶段 ...
- module_init module_exit
像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件,大多的Linux驱动程序需要包含下面三个头文件:#include <linux/init.h>#inc ...