json字符串转java对象
今天遇到一个问题,前端ajax获取到一个javaBean对象,好多方法发ajax请求需要把这个对象再传到后端,后端再根据这个对象进行操作(之前计划传递id,但发现传递id的话,后端多个方法都需要根据id查询数据库获取这个javaBean,因此就修改为直接传递javaBean),这就涉及到了json字符串与java对象转化,特此记录一下。大概有两种方式比较方便:
一、Gson的方式
二、json-lib的方式
1.前端jquery把对象转为json字符串
"dclLine":JSON.stringify(selectedDclLine);

2.后端Gson转java对象
/**
*
* @return
*/
@RequestMapping("/getDayCharge")
@ResponseBody
public List<Object> getDayCharge(HttpServletRequest request){
Map<String, Object> params = new HashMap<String, Object>(16);
//前端左侧树回路信息
String dclLineStr = request.getParameter("dclLine");
Gson gson = new Gson();
//Gson转换json字符串到java对象
DclLine dclLine = gson.fromJson(dclLineStr, DclLine.class);
params.put("dclLine", dclLine);
List<Object> result = runningReportsService.getDayCharge(params);
return result;
}
转换过程报错:
threw exception [Request processing failed; nested exception is
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String] with root cause
比较了下json数据与javaBean的类型发现javaBean定义的类型是Double,json数据是"",类型转换报错了


把javaBean中的Double类型改为String类型后,转换成功

但是改javaBean类型涉及改动太大,
在不改变javaBean类型的情况下,试着用json-lib转换了下,发现json-lib转换不报错
3.后端使用json-lib把json字符串转为java对象
/**
* 日用电负荷
* @return
*/
@RequestMapping("/getDayCharge")
@ResponseBody
public List<Object> getDayCharge(HttpServletRequest request){
Map<String, Object> params = new HashMap<String, Object>(16);
//前端左侧树回路信息
String dclLineStr = request.getParameter("dclLine");
JSONObject json = JSONObject.fromObject(dclLineStr);
DclLine dclLine = (DclLine) JSONObject.toBean(json, DclLine.class);
params.put("dclLine", dclLine);
List<Object> result = runningReportsService.getDayCharge(params);
return result;
}

4.pom配置:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.3</version>
<classifier>jdk15</classifier>
</dependency>
5.总结:
Gson:
String dclLineStr = request.getParameter("dclLine");//获取到json字符串
Gson gson = new Gson();//com.google.gson.Gson
//Gson转换json字符串到java对象
DclLine dclLine = gson.fromJson(dclLineStr, DclLine.class);
json-lib:
String dclLineStr = request.getParameter("dclLine");//获取到json字符串
JSONObject json = JSONObject.fromObject(dclLineStr);//net.sf.json.JSONObject
DclLine dclLine = (DclLine) JSONObject.toBean(json, DclLine.class);
6.参考博客:
https://blog.csdn.net/chenbin520/article/details/8776915
https://www.cnblogs.com/echo-ling/p/8097698.html
https://blog.csdn.net/a77979744/article/details/53695621
https://blog.csdn.net/tanga842428/article/details/54864485
json字符串转java对象的更多相关文章
- JSON字符串与java对象的转换
所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...
- JSON 字符串 与 java 对象的转换
jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html // 引入相应的包 //j ...
- Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- json字符串与java对象的相互转换(jackson)
1.java对象转换为json字符串 package com.chichung.json; import com.fasterxml.jackson.core.JsonProcessingExcept ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
总结一下利用Json相关jar包实现Java对象和集合与Json字符串之间的互相转换: 1.创建的User类: package com.ghj.packageofdomain; public clas ...
- java json数据转List对象的集合-----阿里巴巴插件---及原生json---JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】
List<RunfastFullLess> list=(List<RunfastFullLess>)JSONArray.parseObject(activity.getFull ...
随机推荐
- 移动端三合一瀑布流插件(原生JS)
没有前言,先上DEMO(手机上看效果更佳)和 原码. 瀑布流形式的图片布局方式在手机等移动端设备上运用广泛,比较常见的是下面前两种: 一.等宽等高 这种形式实现起来非常容易,这里就不再多说. 二.等宽 ...
- BCompare破解方法
1.删除 BCUnrar.dll 文件,重启软件. 备注:使用everything搜索BCUnrar.dll
- Shell 基础 -- 总结几种括号、引号的用法
Shell 脚本中经常需要用到一些括号.引号表达式,功能各不相同,本文详细介绍一下. 1.双引号 " " 双引号常用于包含一组字符串,在双引号中,除了 "$". ...
- Alpha版本项目展示得分
团队名称 得分 newbe 80 C705 100 ourteam 60 sevens 50 sixsix 190 dxteam 75 hots 200 Echo 90
- 《Linux内核分析》第四周笔记 扒开系统调用的三层皮(上)
扒开系统调用的三层皮(上) 一.用户态.内核态和中断 库函数将系统调用封装起来. 1.什么是用户态和内核态 一般现代CPU都有几种不同的指令执行级别. 在高执行级别下,代码可以执行特权指令,访问任意的 ...
- Linux内核分析——第五周学习笔记
第五周 扒开系统调用的“三层皮”(下) 一.知识点总结 (一)给MenuOS增加time和time-asm命令 在实验楼中,首先 强制删除menu (rm menu -rf) 重新克隆一个新版本的me ...
- 《linux内核分析》第六周:分析fork函数对应的系统调用处理过程
一. 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 进程是 ...
- Alpha版总结会议——班级派
一.开会的过程 在周一下午上课的最后20分钟内,我们组进行了“班级派”的alpha版的总结会议.首先进行的是分析目前的版本情况,每个人说了自己的进度,包括已经完成的以及即将要完成的.随后是分析前段时间 ...
- Python网络数据采集
一.正则表达式 * 表匹配0次或者多次 a*b* + 表至少一次 [ ] 匹配任意一个 ( ) 辨识一个编组 {m,n} m或者n 次 [^] 匹配任意不在中括号里的字符 | ...
- SDN 交换机迁移1
A game-theoretic approach to elastic control in software-defined networking 2014 之前的交换机迁移的工作(ElastiC ...