原文链接:http://www.itjhwd.com/java_json/

代码

package com.itjh.mmp.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.map.ListOrderedMap;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
*
* 处理json的工具类.
* <br>本类为处理json的工具类
* @author slj
*/
public class JsonTools { /**
*
* json转换list.
* <br>详细说明
* @param jsonStr json字符串
* @return
* @return List<Map<String,Object>> list
* @throws
* @author slj
* @date 2013年12月24日 下午1:08:03
*/
public static List<Map<String, Object>> parseJSON2List(String jsonStr){
JSONArray jsonArr = JSONArray.fromObject(jsonStr);
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Iterator<JSONObject> it = jsonArr.iterator();
while(it.hasNext()){
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
return list;
} /**
*
* json转换map.
* <br>详细说明
* @param jsonStr json字符串
* @return
* @return Map<String,Object> 集合
* @throws
* @author slj
*/
public static Map<String, Object> parseJSON2Map(String jsonStr){
ListOrderedMap map = new ListOrderedMap();
//最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for(Object k : json.keySet()){
Object v = json.get(k);
//如果内层还是数组的话,继续解析
if(v instanceof JSONArray){
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Iterator<JSONObject> it = ((JSONArray)v).iterator();
while(it.hasNext()){
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
map.put(k.toString(), list);
} else {
map.put(k.toString(), v);
}
}
return map;
} /**
*
* 通过HTTP获取JSON数据.
* <br>通过HTTP获取JSON数据返回list
* @param url 链接
* @return
* @return List<Map<String,Object>> list
* @throws
* @author slj
*/
public static List<Map<String, Object>> getListByUrl(String url){
try {
//通过HTTP获取JSON数据
InputStream in = new URL(url).openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line;
while((line=reader.readLine())!=null){
sb.append(line);
}
return parseJSON2List(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
*
* 通过HTTP获取JSON数据.
* <br>通过HTTP获取JSON数据返回map
* @param url 链接
* @return
* @return Map<String,Object> 集合
* @throws
* @author slj
*/
public static Map<String, Object> getMapByUrl(String url){
try {
//通过HTTP获取JSON数据
InputStream in = new URL(url).openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line;
while((line=reader.readLine())!=null){
sb.append(line);
}
return parseJSON2Map(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
*
* map转换json.
* <br>详细说明
* @param map 集合
* @return
* @return String json字符串
* @throws
* @author slj
*/
public static String mapToJson(Map<String, String> map) {
Set<String> keys = map.keySet();
String key = "";
String value = "";
StringBuffer jsonBuffer = new StringBuffer();
jsonBuffer.append("{");
for (Iterator<String> it = keys.iterator(); it.hasNext();) {
key = (String) it.next();
value = map.get(key);
jsonBuffer.append(key + ":" +"\""+ value+"\"");
if (it.hasNext()) {
jsonBuffer.append(",");
}
}
jsonBuffer.append("}");
return jsonBuffer.toString();
} //test
public static void main(String[] args) {
String url = "http://...";
List<Map<String,Object>> list = getListByUrl(url);
System.out.println(list);
}
}

小龙点评

经过实际测试,Map嵌套可以成功转换!

Java处理JSON的工具类(List、Map和JSON之间的转换)——依赖jsonlib支持Map嵌套的更多相关文章

  1. java处理json的工具类(list,map和json的之间的转换)

    需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...

  2. Jsoup请求http或https返回json字符串工具类

    Jsoup请求http或https返回json字符串工具类 所需要的jar包如下: jsoup-1.8.1.jar 依赖jar包如下: httpclient-4.5.4.jar; httpclient ...

  3. 处理json的工具类({本类为处理json的工具类})

    <jackson.version>2.2.3</jackson.version> <!-- json --> <dependency> <grou ...

  4. 最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!

    转载自:https://github.com/whvcse/RedisUtil 代码 ProtoStuffSerializerUtil.java import java.io.ByteArrayInp ...

  5. java中常用的工具类(一)

    我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...

  6. Java并发多线程 - 并发工具类JUC

    安全共享对象策略 1.线程限制 : 一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改 2.共享只读 : 一个共享只读的对象,在没有额外同步的情况下,可以被多个线程并发访问, 但是任何线程都 ...

  7. Redis 工具类 java 实现的redis 工具类

    最近了解了一下非关系型数据库 redis 会使用简单的命令 在自己本地电脑 使用时必须先启动服务器端 在启动客户端 redis 简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...

  8. Java 中的并发工具类

    Java 中的并发工具类 CountDownLatch public class JoinCountDownLatchTest { public static void main(String[] a ...

  9. Java线程的并发工具类

    Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...

随机推荐

  1. openfire 发送 接受 注册 广播 好友列表 在线状态

    package cn.zsmy.utils.openfire; import java.io.BufferedReader; import java.io.InputStreamReader; imp ...

  2. 记一次金士顿DT100 G3 32G修复

    修复方法参考原文:http://bbs.mydigit.cn/read.php?tid=2291146 故障描述:某天在使用时突然要求格式化,但里面有重要数据,于是想通过DG恢复出来,没想到经过这样的 ...

  3. FireFox在新标签中打开搜索结果

    原文:https://jingyan.baidu.com/article/20b68a88563a1b796cec6228.html 步骤如下: (1)在浏览器的地址栏输入:about:config, ...

  4. keepalived+nginx双机热备+负载均衡

    Reference: http://blog.csdn.net/e421083458/article/details/30092795 keepalived+nginx双机热备+负载均衡 最近因业务扩 ...

  5. Notepad++的右键菜单

    这种方法可以重复利用,如果下次它又消失了,你可以再导入一次就OK了.比如我们创建一个叫 notepad++.reg的文件,将下面的内容拷贝进去保存 Windows Registry Editor Ve ...

  6. [转]启动Tomcat提示:指定的服务未安装

    原文地址:http://blog.csdn.net/yilip/article/details/8066246 新下载的Tomcat7.0 解压缩完了运行tomcat7.exe屏幕一闪就没了 运行to ...

  7. mongo批量更新、导入导出脚本

    批量更新,一定要加上最后的条件: db.getCollection('cuishou_user').update( {,,,,,]}}, //query {$set:{)}},// update {m ...

  8. C语言 · 分分钟的碎碎念

    算法提高 分分钟的碎碎念   时间限制:1.0s   内存限制:256.0MB      问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...

  9. <漫步华尔街——股市历久弥新的成功投资策略>读书笔记

    书在这里 随机游走是指基于过去的表现,无法预测将来的发展步骤和方向. 仅仅为了达到盈亏相抵点,你的投资回报率至少也要等于通货膨胀率 磐石理论认为,无论是普通股票还是不动产,每一种投资工具都具有被称为“ ...

  10. Go Revel - Routing(路由)

    `Routing`路由控制着请求应该由哪些控制器接受. 它在项目的`conf/routes`文件中定义. 格式为: (METHOD) (URL Pattern) (Controller.Action) ...