1、JSON的作用和好处

     在JavaWeb项目中前后端直接的交互,接口之间的对接等等,基本离不开JSON。

    JSON: 全称JavaScript Object Notation(JavaScript 对象表示法)

    JSON 是存储和交换文本信息的语法。类似 XML。

    JSON 比 XML 更小、更快,更易解析

  2、配置jackson的jar包

  1)、最快的方式是在Spring boot中的pom.xml中加入

       <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.3</version>
</dependency> <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>

     2)、手动导入(版本不一定要相同)

 3、为了更加方便的使用JSON,封装成一个jsonMapper工具类

package com.djb.common.utils;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.JSONPObject; public class JsonMapper {
private static Log logger = LogFactory.getLog(JsonMapper.class); private static ObjectMapper mapper;
private static JsonMapper _instance = new JsonMapper(); private JsonMapper() {
mapper = getMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false); // 允许出现特殊字符和转义符
mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); // 允许出现单引号
mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);
} /**
* 如果JSON字符串为Null或"null"字符串, 返回Null. 如果JSON字符串为"[]", 返回空集合.
*
* 如需读取集合如List/Map, 且不是List<String>这种简单类型时使用如下语句,使用後面的函数.
*/
public <T> T fromJson(String jsonString, Class<T> clazz) {
if (StringUtils.isEmpty(jsonString)) {
return null;
} try {
return mapper.readValue(jsonString, clazz);
} catch (IOException e) {
logger.warn("parse json string error:" + jsonString, e);
return null;
}
} /**
* 如果JSON字符串为Null或"null"字符串, 返回Null. 如果JSON字符串为"[]", 返回空集合.
*
* 如需读取集合如List/Map, 且不是List<String>时,
* 先用constructParametricType(List.class,MyBean.class)构造出JavaTeype,再调用本函数.
*/
@SuppressWarnings("unchecked")
public <T> T fromJson(String jsonString, JavaType javaType) {
if (StringUtils.isEmpty(jsonString)) {
return null;
} try {
return (T) mapper.readValue(jsonString, javaType);
} catch (IOException e) {
logger.warn("parse json string error:" + jsonString, e);
return null;
}
} /**
* 构造泛型的Type如List<MyBean>, Map<String,MyBean>
*/
public JavaType constructParametricType(Class<?> parametrized, Class<?>... parameterClasses) {
return mapper.getTypeFactory().constructParametricType(parametrized, parameterClasses);
} /**
* 如果对象为Null, 返回"null". 如果集合为空集合, 返回"[]".
*/
public String toJson(Object object) { try {
return mapper.writeValueAsString(object);
} catch (IOException e) {
logger.warn("write to json string error:" + object, e);
return null;
}
} /**
* 输出JSONP格式数据.
*/
public String toJsonP(String functionName, Object object) {
return toJson(new JSONPObject(functionName, object));
} /**
* 取出Mapper做进一步的设置或使用其他序列化API.
*/
public static ObjectMapper getMapper() {
if (mapper == null) {
mapper = new ObjectMapper();
}
return mapper;
} /**
* 获取实例
*
* @return
*/
public static JsonMapper getInstance() {
return _instance;
}
}

  4、接下来就可以进行测试了。

package com.lrj;

import java.util.Map;

import com.lrj.bean.Developer;
import com.lrj.common.JsonMapper; public class Test01 { public static void main(String[] args) { Developer developer = new Developer();
developer.setName("Jack");
developer.setAge(22);
developer.setDept("IT");
     developer.setSaraly(8000D);
developer.setAddress("博客园"); //对于复杂的list,要先转换为map集合,再转为对象
String jsonStr = "{\"developer\":\"{\\\"name\\\":\\\"Jack\\\",\\\"age\\\":22,\\\"saraly\\\":8000.0,\\\"address\\\":\\\"博客园\\\",\\\"dept\\\":\\\"IT\\\"}\",\"other\":null}";
Map<String, Object> map = JsonMapper.getInstance().fromJson(jsonStr, Map.class);
String beanStr = map.get("developer") + "";
Developer developer3 = JsonMapper.getInstance().fromJson(beanStr, Developer.class);
System.out.println(developer3);
String jsonString = JsonMapper.getInstance().toJson(developer);
System.out.println(jsonString); Developer developer2 = JsonMapper.getInstance().fromJson(jsonString, Developer.class);
System.out.println(developer2); }
}

  5、测试json是否合法,已经将json转化为实体类的网站

    http://www.bejson.com/json2javapojo/new/

    当遇到json转换异常时可以,先debug或者输出json字符串,复制到网站测试是否通过,来帮助排查错误。

注意:转化的json不是简单的list<String>即js对象中含有其他对象,用java实体类来讲,就是一个类中包含其他类,

   此时得先将json转化为Map<String, Object>,再取出其中想要的对象,转化为实体类。

例如:

    Map<String, Object> map = JsonMapper.getInstance().fromJson(JSONStr, Map.class);
  String bean = map.get("Bean") + "";
if (UtilPublic.notEmpty(pickup)) {
Bean b = JsonMapper.getInstance().fromJson(bean, Bean.class);
  }

  6、后记

    有好多想写下来的,但没写,不是什么忙的,就是自己懒,想着,这弄一下,至少得个把或几个小时。

    转发请注明出处https://www.cnblogs.com/lrj1009IRET/p/9454728.html ,谢谢!

JSON《===》JavaBean的相互转换的更多相关文章

  1. Json字符与Json对象的相互转换

    Json字符与Json对象的相互转换方式有很多,接下来将为大家一一介绍下,感兴趣的朋友可以参考下哈,希望可以帮助到你 1>jQuery插件支持的转换方式: 复制代码 代码如下: $.parseJ ...

  2. JSON对象、JSON字符串的相互转换

    JSON对象.JSON字符串的相互转换 json的格式: 第一种方式: 单一的json字符串,转换成json对象时,需要 eval('(' + json + ')');这样的格式,中间需要加括号 va ...

  3. JavaScriptES6中Map与对象、数组,JSON之间的相互转换

    JavaScriptES6中Map与对象.数组,JSON之间的相互转换 https://blog.csdn.net/c__dreamer/article/details/82183130

  4. JSONObject、JSONArray、Map、JavaBean的相互转换

    1,JSONObject json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value} 2,JSONArray json数组,使用中括号[ ],只不过数组里面的项也是json键 ...

  5. SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析

    两个方向: 一.前台至后台: Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int, ...

  6. javascript:json对象和json字符串的相互转换

    json对象和字符串的相互转换 //使用json中的parser方法转换: var str='{"name":"fendouer", "age&quo ...

  7. Array(数组)与Json String (Json字符串) 的相互转换

    1.Array转换成Json String             function jsonToString(arr) {             var s = "";     ...

  8. js中json字符串与json对象的相互转换

    web前端开发过程中,数据传输json是以字符串的形式传递,而js操作的是JSON对象. 一.JSON字符串转换为JSON对象 var obj = JSON.parse(str[, reviver]) ...

  9. JavaScript对象与JSON字符串的相互转换

    JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集.正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中. eval函数 ...

随机推荐

  1. 微信开发中使用微信JSSDK和使用URL.createObjectURL上传预览图片的不同处理对比

    在做微信公众号或者企业微信开发业务应用的时候,我们常常会涉及到图片预览.上传等的处理,往往业务需求不止一张图片,因此相对来说,需要考虑的全面一些,用户还需要对图片进行预览和相应的处理,在开始的时候我使 ...

  2. .NET Core使用gRPC打造服务间通信基础设施

    一.什么是RPC rpc(远程过程调用)是一个古老而新颖的名词,他几乎与http协议同时或更早诞生,也是互联网数据传输过程中非常重要的传输机制. 利用这种传输机制,不同进程(或服务)间像调用本地进程中 ...

  3. linux ln命令 建立文件夹桌面快捷方式

    指令如下: sudo ln -s /root/myhack/ /root/Desktop 以上指令是创建软链接到桌面. 指令解析: ln -s是创建软链接指令,如果不加-s则是创建硬链接.

  4. MYSQL中HEX、UNHEX函数

    HEX()函数:返回十六进制值的字符串表示形式.注意:并不是十进制转化为十六进制数,而是转化为字符串... UNHEX() 函数: 每对十六进制数字转化为一个字符. 下面是HEX()几个简单的例子: ...

  5. ‎Cocos2d-x 学习笔记(14.2) EventListener _paused _isEnabled _isRegistered

    监听器3个bool类型成员变量. 监听器能设置是否能够接收事件. 能随时接收事件进行处理,此时把它看做工作状态,需要满足条件:     _paused = false;     _isEnabled ...

  6. 初识AutoIt

    1.定义 AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组 ...

  7. pytest1-Installation and Getting Started

    pytest是python的一种单元测试框架(非自带,需要安装),与python自带的unitest测试框架相比,使用起来更加简洁.效率更高.总之,一句话,pytest优于unitest. 1.安装p ...

  8. {每日一题}:四种方法实现打印feibo斐波那契数列

    刚开始学Python的时候,记得经常遇到打印斐波那契数列了,今天玩玩使用四种办法打印出斐波那契数列 方法一:使用普通函数 def feibo(n): """ 打印斐波那契 ...

  9. 学习了解Shiro框架

    有关Shiro安全框架 实现权限的几种方式 1)通过表来实现 2)shiro框架 3)Spring Security框架 shiro有哪些主要功能 1.授权 访问控制的过程,即确定谁有权访问 2.身份 ...

  10. 基础安全术语科普(五)——crypter

    crypter(加壳):使病毒逃过反病毒软件检测的技术 UD类加壳病毒:只有%50至%25的软件能检测出是病毒. FUD类加壳病毒:完全不会被检测出来. 加壳技术有两个主要组件: 1.client — ...