fastjson转换json格式数据为List<HashMap>转换异常问题

在做crm任务分发系统中的【批量修改任务工单的选项】问题时,需要对接口数据进行处理,接口数据举例如下,

[

{

"title": "使用情况",

"options": [

{

"name": "好",

"value": 1

},

{

"name": "不好",

"value": 2

},

{

"name": "还行",

"value": 3

}

]

},

{

"title": "优化情况",

"options": [

{

"name": "好",

"value": 1

},

{

"name": "不好",

"value": 2

},

{

"name": "还行",

"value": 3

}

]

}

]

注意,options里是个array或者list 。

虽然结构复杂,但是也算清晰。一开始想用JSONArray.parseArray(jsondata, HashMap.class); 转化为以一个List<HashMap>,然后再取得每个HashMap,每个HashMap中又是一个List<HashMap>,然后再遍历取得HashMap。

但是就在第二次遍历list的时候出现了异常,

  1. for(HashMap configData : configDataList ){          //这行出错
  2. int value = (Integer)configData.get("value");
  3. }

结果运行发现有错,错误信息如下:

Exception in thread “” java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to java.util.HashMap

跟踪发现,那个地方其实包含的是个JSONArray,所以cast出错。 解决方法,对应json格式的数据,写出对应的java bean,然后再来反序列化。

不过由于只有一个调用,没有必要再添加一个bean,所以自己写了一个处理函数,目的是要让fastjson处理后,得到的结果里不再有com.alibaba.fastjson包下的类型:

// 将jsonString转化为hashmap

private HashMap<String, Object> fromJson2Map(String jsonString) {

HashMap jsonMap = JSON.parseObject(jsonString, HashMap.class);

HashMap<String, Object> resultMap = new HashMap<String, Object>();

for(Iterator iter = jsonMap.keySet().iterator(); iter.hasNext();){

String key = (String)iter.next();

if(jsonMap.get(key) instanceof JSONArray){

JSONArray jsonArray = (JSONArray)jsonMap.get(key);

List list = handleJSONArray(jsonArray);

resultMap.put(key, list);

}else{

resultMap.put(key, jsonMap.get(key));

}

}

return resultMap;

}

private  List<HashMap<String, Object>> handleJSONArray(JSONArray jsonArray){

List list = new ArrayList();

for (Object object : jsonArray) {

JSONObject jsonObject = (JSONObject) object;

HashMap map = new HashMap<String, Object>();

for (Map.Entry entry : jsonObject.entrySet()) {

if(entry.getValue() instanceof  JSONArray){

map.put((String)entry.getKey(), handleJSONArray((JSONArray)entry.getValue()));

}else{

map.put((String)entry.getKey(), entry.getValue());

}

}

list.add(map);

}

return list;

}

时间: 2024-10-05 04:40:41

fastjson转换json格式数据为List<HashMap>转换异常问题的相关文章

fastJson java后台转换json格式数据

什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等

.NET的JSON格式数据的三种转换方式

说明: 1..Net进行JSON格式的数据传递的时候,势必用到序列化和反序列化对象,总共有三种方式可是在.NET中实现序列化和反序列化的需求. 2.操作JSON的速度是:Json.net > MicrosoftJSON > JsJSON 3.下面对应的三种将对象转为JSON格式数据方式的目前相对很好博客. 5.谢谢各位前辈的辛苦发帖,各人表示由衷的敬意. JSON.NET 参考的博客: [1]JSON.NET使用技巧:http://www.cnblogs.com/IPrograming/p/4

java后台对json格式数据的解析

Json 和 Jsonlib 的使用 什么是 Json JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成.它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集. JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族

java将XML文档转换成json格式数据

功能 将xml文档转换成json格式数据 说明 依赖包: 1. jdom-2.0.2.jar : xml解析工具包; 2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 程序源码 package com.xxx.open.pay.util; import com.alibaba.fastjson.JSONObject; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdo

JAVA操作JSON格式数据

由于近些日子公司在弄微信项目,而微信官方API所提供的接口当中,有些需要以POST方式进行请求,且数据传输格式要求为JSON格式数据,之前没怎么研究过,而且传递的数据格式相对也比较简单,所以直接都是采用的字符串拼接的方式进行组装的,之后再用String.format格式化一下就好了. //需要提交的json数据 String jsonData = "{\"openid\":\"%s\",\"to_groupid\":%d}";

Java入门系列:处理Json格式数据

本节主要讲解: 1)json格式数据处理方法 2)第三方工具包的使用方法 3)java集合数据类型 [项目任务] 编写一个程序,显示未来的天气信息. [知识点解析] 为了方便后面代码的分析,先需要掌握几个相关的知识. 1.什么是json格式数据 从结构上看,我们所见到的所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是

转换Json格式帮助类

using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Data; using System.Collections; namespace AIMSCommon { /// <summary> /// 转换Json格式帮助类 /// </summary> public class JsonHelper { /// <summ

在JSP页面中输出JSON格式数据

JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库. JSON-taglib主页: http://json-taglib.sourceforge.net/index.htmlJAR包下载地址: http://sourceforge.net/projects/json-taglib/files/latest/download 使用方法:1.下载json-taglib.jar,将其放到WEB-INF/lib目录2.在jsp页面中做如下声明:<%@ taglib prefix=&qu

Java Servlet生成Json格式数据

Java Servlet生成Json格式数据 分类: Web JAVA2013-09-17 14:38 4805人阅读 评论(1) 收藏 举报 在Servlet中覆写doGet方法,是用JSONStringer 类: [java] view plaincopyprint? protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //