2019独角兽企业重金招聘Python工程师标准>>>

在做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;
}

转载于:https://my.oschina.net/zouqun/blog/408648

fastjson转换json格式数据为ListHashMap转换异常问题相关推荐

  1. Poco库使用:操作Json格式数据

    文章目录 1.解析json字符串数据 2.生成Json格式的数据 3.操作Json数组 4.使用字符串流转换Json格式数据 5.使用键值检索Json结构中的数据 6.使用原始字符串避免字符转义 7. ...

  2. xml 文本转json java_java将XML文档转换成json格式数据

    本篇文章主要介绍了java将XML文档转换成json格式数据的示例,希望能帮助到大家. 功能 将xml文档转换成json格式数据 说明 依赖包: 1. jdom-2.0.2.jar : xml解析工具 ...

  3. python json格式和csv文件转换

    python json格式和csv文件转换 上代码 1 import csv 2 import json 3 4 ''' 5 json格式示例 6 [{ "firstName":& ...

  4. 前端json格式的介绍,转换以及解析

    近几日碰到json的问题比较多,我这里做一个总结,比较浅显简单,希望能对那些前端小白有所帮助,能对json有一个认识,并且能简单的处理json格式的内容. 例如最近碰到一个项目,项目需求如下: 用户选 ...

  5. 关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决

    关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决 参考文章: (1)关于Laravel中使用response()方法调用json()返回数据un ...

  6. Json格式数据解析

    一.简介 XML这种数据格式.XML的特点是功能全面,但标签繁琐,格式复杂.在Web上使用XML现在越来越少,取而代之的是JSON这种数据结构. JSON是JavaScript Object Nota ...

  7. FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

    fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. JSONObject:fas ...

  8. python中json模块_Python使用内置json模块解析json格式数据的方法

    本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...

  9. 通过输入流获取json格式数据转为map格式

    将通过输入流获取json格式数据转为map格式 转换代码: try {int length = 0;//通过输入流获取到json格式数据ServletInputStream inputStream = ...

最新文章

  1. jittor 训练手写数字识别(mnist)
  2. 数制之非十进制数转十进制数
  3. 20321关系数据库理论基础
  4. python爬取贴吧所有标题的评论_用BS4爬取贴吧文章的作者信息时,如何兼顾爬取高亮的作者信息?...
  5. 从List分组后重新组织数据
  6. 黑客开始利用云计算暴力破解密码
  7. thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)
  8. 集成电路技术与产业发展
  9. 高级商务办公软件应用【6】
  10. 词云图生成器使用帮助
  11. 01.数模竞赛论文的写作
  12. php在广告策划方面需要什么,网上推广网店运营 系统是基于PHP+MySQL的B2B(电子商务)行业门户解决方案”是什么意思呢,谢谢...
  13. 2015阿里巴巴校招网上笔试
  14. android 7.0下载地址,android 7.0 Downloadprovider 下载流程
  15. UnityShader入门精要——运动模糊
  16. 博弈问题总集第三类----Staircase Nim
  17. C++编译器如何实现异常处理
  18. nginx配置https阿里云免费ssl
  19. go语言开发工具sublime text3 + gosublime配置
  20. Android Systrace 基础知识(10) - Binder 和锁竞争解读

热门文章

  1. 安装mysql数据库及问题解决方法
  2. ie8不支持console.log()的解决方法
  3. ubuntu终端执行shell脚本报command not found解决方法
  4. 移动硬盘新建选项消失、不能新建文件夹和文件的解决方案
  5. 为什么++ [[]] [+ []] + [+ []]返回字符串“ 10”?
  6. python口号_编程语言的口号
  7. Andriod:serializer序列化器生成xml文件
  8. python解析dom,关于Python解析xml dom的简单应用
  9. shell for循环两个变量并列_从Go汇编角度解释for循环的两个疑点
  10. 关于现代计算机的知识,从资本经济到知识经济:现代计算机的知识革命