json字符串转成java的map与list复合对象的解决方法
来源:互联网 发布:京东网络同步时钟 编辑:程序博客网 时间:2024/06/05 21:06
开发时需要将json字符串转成java的map和list,找了半天竟然没有一个现成的的包支持这种功能!不可思议,苦苦在stackoverflow上求医问药,终于找到jackson的一个特性,可以生成json的节点树,这才终于解决了这个头疼的问题。
代码引用了jackson2.7.3的两个包:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>
递归遍历每个节点然后判断节点的类型做转换,代码如下:
import com.fasterxml.jackson.core.JsonFactory;import com.fasterxml.jackson.databind.JsonNode;import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException;import java.util.*;/** * Created by fineTu on 2016/09/27. */public class JsonUtil { public static Map<String,Object> parse(String jsonStr) throws IOException { Map<String,Object> resMap = new HashMap<String, Object>(); JsonFactory factory = new JsonFactory(); ObjectMapper mapper = new ObjectMapper(factory); JsonNode rootNode = mapper.readTree(jsonStr); resMap = parseNode2Obj(rootNode); return resMap; } private static Map<String,Object> parseNode2Obj(JsonNode jsonNode){ Map<String,Object> resMap = new HashMap<String, Object>(); if(jsonNode.isValueNode()){ Object value = parseValue(jsonNode); resMap.put("",value); return resMap; }else if(jsonNode.isArray()){ List<Object> list = new ArrayList<Object>(); Iterator<JsonNode> it = jsonNode.iterator(); while( it.hasNext()){ Map<String,Object> child = parseNode2Obj(it.next()); if (child.keySet().size() == 1 && child.keySet().contains("")){ list.add(child.get("")); }else{ list.add(child); } } resMap.put("",list); return resMap; }else { Iterator<Map.Entry<String,JsonNode>> it = jsonNode.fields(); while( it.hasNext()){ Map.Entry<String,JsonNode> entry = it.next(); Map<String,Object> child = parseNode2Obj(entry.getValue()); if (child.keySet().size() == 1 && child.keySet().contains("")){ resMap.put(entry.getKey(),child.get("")); }else{ resMap.put(entry.getKey(),child); } } return resMap; } } private static Object parseValue(JsonNode valueNode){ if(valueNode.isTextual()){ return valueNode.asText(); }else if(valueNode.isInt()){ return valueNode.asInt(); }else if(valueNode.isBigInteger() || valueNode.isLong()){ return valueNode.asLong(); }else if(valueNode.isFloat() || valueNode.isDouble()){ return valueNode.asDouble(); }else if(valueNode.isBoolean()){ return valueNode.asBoolean(); } return valueNode.asText(); } public static void main(String[] args){ String jsonStr = "{\"a\":12,\"b\":\"foobar\",\"c\":[\"tom\",\"peter\",\"joe\"],\"d\":{\"da\":\"1123\",\"db\":456,\"dc\":[{\"name\":\"super man\",\"id\":1},{\"name\":\"bat man\",\"id\":2}]}}"; try { Map<String,Object> resMap = JsonUtil.parse(jsonStr); System.out.println(resMap); } catch (IOException e) { e.printStackTrace(); } }}
代码贡献出来,节省你的时间
转载请注明出处:http://blog.csdn.net/gklifg/article/details/52680854
1 0
- json字符串转成java的map与list复合对象的解决方法
- json:java对象与json字符串互转、java的list和map各自与json字符串的互转
- json字符串转成 Map/List
- json字符串转成 Map/List
- json字符串转成 Map/List
- Json字符串转成List对象
- java将json字符串转成List/Map实例
- java中把List转成json数组格式的字符串
- 把普通的java对象转成json字符串
- java将json格式的字符串转成实体对象
- js中的Array对象转成字符串;java中的List转成String数组, List集合的合并
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
- Java List或Map对象和json字符串数据的相互转化
- JAVA Map、List、Object转换后的JSON字符串
- 利用Gson使json字符串与java bean/list/map之间的相互转换
- 记录学习过程中碰到的json对象数组字符串转成list方法
- js里面JSON格式的字符串转成JSON对象
- JSON的String字符串与Java的List列表对象的相互转换
- 仿ios键盘效果 点击输入框以外区域键盘消失
- 写一个 shell 脚本 守候rocketmq 进程不当掉
- 遇到的一些语法问题,网上查到的资料
- JSON格式的String 转成 net.sf.json.JSONObject
- 记录个java大文件上传功能的实现
- json字符串转成java的map与list复合对象的解决方法
- 论不良贷款拨备覆盖率的局限性和建议
- jar打包与常见异常的解决方法
- android程序根activity中点返回,实现按下home键的效果
- 【Win10开发】关于汉堡菜单-SplitView的用法
- 使用Jquery解析Json基础知识
- jsp中url传值中文乱码解决方法
- RTP 时间戳
- django 购物系统 - 添加至购物车表单