JSON《===》JavaBean的相互转换

 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 ,谢谢!

 

转载于:https://www.cnblogs.com/lrj1009IRET/p/9454728.html

JSONObject依赖的jar包 JSONObject对象jar包及相关的jar包依赖,一共有7个!包括原网站下载的资源包! 立即下载

相关推荐

整理的15个公开且可直接使用的电力视觉输电线路领域数据集

而巡检数据是目前来说影响我们做科研的最大阻碍,为此本内容主要总结了,现有的且公开免费的巡检数据集,供大家使用。STN PLAD数据集133个航拍图像,五个电力部件:电力塔及其塔的ID、绝缘子,防震锤,联板(yoke),图像的尺寸在5472×3648到5472×3078。IDID数据集:2000张图像,包含三个类别,正常绝缘子,破损绝缘子和闪络绝缘子三个类别,用于目标检测的实验。TTPLA数据集,用于实例分割,1100张尺寸为3840×2160,包含两个类别,电力杆塔和电力线。主要用于电力杆塔的目标检测。

weixin_42048361的博客 5019

语法篇-JSON基础

script>name : '烟雨平生',age : 20,sex : "男"

qq_62377885的博客 6169

富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传

文章目录一、蓝牙协议栈启动流程1.1 初始化代码1.2 初始化流程1.3 回调函数里的初始化二、notify实现2.1 notify介绍2.2 notify实现2.3.1 定义数据2.3.2 获取连接号conidx2.3.3 gatt_notification函数的使用三、notify温度上传测试3.1 蓝牙调试工具3.2 蓝牙调试器设置3.3 测试结果四、参考链接   基于sdk开发的好处是方便项目的快速落地,现在用的是SDK里面的源文件,目前只是学习FR801xH芯片的特性,裁剪这个SDK需要点时间,

weixin_43810563的博客 4319

我的第二课:【JSON】====JSON 语法

 JSON 语法是 JavaScript 对象表示法语法的子集。 数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是:名称/值对。 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值: "firstName" : "John" JSON 对象 JSON 对象在花括号中书写: 对

没有一明天的专栏 643

别再自己写组件了!用uni-app的midButton属性5分钟搞定中间凸起TabBar(H5/小程序通用)

本文详细介绍了uni-app官方提供的midButton属性,帮助开发者5分钟内实现中间凸起的TabBar效果,无需编写繁琐的自定义组件代码。该方案兼容H5和微信小程序平台,配置简单且维护成本低,大幅提升开发效率和性能表现。

weixin_30431445的博客 348

我的第一课:【JSON】====创建 JSON 对象

  类似 XML JSON 是纯文本JSON 具有“自我描述性”(人类可读)JSON 具有层级结构(值中存在值)JSON 可通过 JavaScript 进行解析JSON 数据可使用 AJAX 进行传输 相比 XML 的不同之处 没有结束标签更短读写的速度更快能够使用内建的 JavaScript eval() 方法进行解析使用数组不使用保留字       在J

没有一明天的专栏 584

Trae+Playwright MCP自动化测试全流程指南:从环境搭建到智能体运行

本文提供了一份详细的Trae与Playwright MCP集成指南,涵盖从Node.js、Python环境搭建到智能体创建的全流程。通过结合MCP协议,AI智能体能够理解任务并驱动Playwright执行复杂的浏览器自动化操作,实现从网页数据抓取到端到端测试的智能工作流。

banana的博客 531

Json补充==案例

简介 Spring : 春天 —>给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。 很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。 Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术 官网 : http://spring.io/ 官方下载地

codel 195

手把手教你用Python实现双三次插值(附OpenCV对比测试)

本文深入解析了双三次插值算法的数学原理,并提供了从零开始的Python实现教程。通过与OpenCV官方实现的对比测试,详细评估了不同插值算法(包括最邻近差值、双线性插值)在图像质量与计算性能上的差异,帮助开发者掌握高质量图像缩放的核心技术。

weixin_29310605的博客 296

测风数据垂直外推(原理及Windowgrapher操作示范)

垂直外推

weixin_46713695的博客 896

前端之JSON详解

JSON一、语法1、简单值2、对象3、数组二、解析与序列化1、JSON对象1、stringify()方法2、parse()方法2、序列化选择1、过滤结果2、字符串缩进3、toJSON()方法3、解析选项         JSON:( JavaScript Object Notation JavaScript 对象标记法) 是一种存储和交换数据的语法。JSON 是通过 JavaScript 对象标记法书写的文本。它是一种数据格式,

m0_48375854的博客 1万+

100天精通Python(基础篇)——第22天:eval 函数基础以及危险警告

1. eval()函数的概念 2. eval()函数语法 3. 命名空间 4. 使用实例 1. 基本的数学运算 2. 字符串重复 3. 将字符串转换成列表 4. 将字符串转换成字典 5. 将字符串转成元祖 6. 与其它函数结合使用 7. globals参数案例 8. locals参数案例 5. eval函数的危险之处(重中之中)

努力让自己发光,对的人才能迎着光而来 15万+

XML JSON JavaBean相互转换

程序员小白初入优快云多多关照目的做的一些工作环境XML与JSONXML2JSONJSON2XMLXML与JavaBeanJavaBeanXML2JavaBeanJavaBean2XML通过JAXB实现转换使用XStream转单个Bean使用XStream转List BeanJavaBean与JSONJavaBean2JSONJSON2JavaBean结语 目的 其实吧就是刚开始实习,老师傅让我接...

Keenang的博客 879

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java - JavaBean json map相互转换

方法一,利用fastjson在JavaBean,json,map间相互转换 User user = new User(); user.setUid(1); user.setUname("jack"); // JavaBean转json JSON json = (JSON) JSON.toJSON(u...

飞舞天漄 1133

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java bean jsonobject_JSON、JSONObject、JavaBean三者的相互转换

JSON、JSONObject、JavaBean三者的相互转换平常的开发中,json的转换是需要经常使用到的,特意整理了下。User user = new User(1L, "haha", 13, "erfa",new Date(),new Date(),1,3);@Testvoid testFastJson() {//将对象转换成json字符串String userToJsonString = ...

weixin_39984201的博客 1182

使用FastJson对JSON字符串、JSON对象及JavaBean之间的相互转换

maven依赖包: <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> ...

xuforeverlove的博客 34万+

关于json与javaBean之间的转换

json与javaBean之间的互相转换

AllenWish的博客 4282

使用Fastjson实现JSON与JavaBean之间互相转换

原文链接:http://www.yiidian.com/fastjson/fastjson-json-javabean.html 1 简单JSON与JavaBean的转换 1.1 设计Student实体类 package com.yiidian.domain; /** * 一点教程网 - http://www.yiidian.com */ public class Student { ...

Java客学习室 4340

通过JSONArray让json和javabean互相转换

package com.cjonline.foundation.util; import java.lang.reflect.Array;import java.util.Date; import net.sf.json.JSONArray;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;import net.s...

anwenzhao0749的博客 1680

JavaBean和json数据之间的转换(一)简单的JavaBean转换

  1.为什么要使用json?     JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,因为其高性能、可读性强的原因,成为了现阶段web开发中前后端交互数据的主要数据格式   2.简单的JavaBean和json之间的转换     1)首先,我们先写一个简单的JavaBean,内容非常简单,只有name和age两个字段 public cla...

qq_36115578的博客 2831
上一篇: 去重算法,简单粗暴&优化版
下一篇: Apache Jmeter进行服务器压力测试
admin99900
博客等级 码龄12年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值