如何将Mapjson转化为字符串json字符串

博客分类:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
欲实现JSON字符串和java对象之间的互相转换,方法有很多!本人层也因为项目上的需求,一度对这几种方法做过研究和试验!现将自己的一点小经验分享与大家,如有纰漏,请指正!
--------------------------------------------------------------------------------
1.通过json_lib来实现对json和java对象之间的转换,使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作:
注:欲使用json_lib需要以下几个jar包的支持:json-lib-1.1-jdk15.jar
下载地址:http://json-lib.sourceforge.net
commons-collections-3.2.1.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
commons-beanutils-1.8.0.jar
以上commons系列包在tomcat/comon/lib下可以找到;
ezmorph-1.0.6.jar
下载地址http://ezmorph.sourceforge.net
morph-1.0.1 下载地址:http://morph.sourceforge.net
有了这些jar包的支持,平时关于json处理的方法都可以找到对应的类;贴上一段代码示例:
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import java.util.S
import net.sf.json.JSONA
import net.sf.json.JSONO
public class JSONHelper {
* 将JSONArray对象转换成Map-List集合
* @param jsonArr
public static Object JsonToList(JSONArray jsonArr){
List&Object& jsonObjList = new ArrayList&Object& ();
for(Object obj : jsonArr){
if(obj instanceof JSONArray){
jsonObjList.add(JsonToList((JSONArray) obj));
} else if(obj instanceof JSONObject){
jsonObjList.add(JsonToMap((JSONObject) obj));
jsonObjList.add(obj);
return jsonObjL
将JSONObjec对象转换成Map-List集合
* @param json
public static Map&String, Object& JsonToMap(JSONObject json){
Map&String,Object& columnValMap = new HashMap&String,Object&();
Set&Object& jsonKeys = json.keySet();
for (Object key : jsonKeys) {
Object JsonValObj = json.get(key);
if(JsonValObj instanceof JSONArray){
columnValMap.put((String)key,
JsonToList((JSONArray) JsonValObj));
}else if(key instanceof JSONObject){
columnValMap.put((String)key,
JsonToMap((JSONObject) JsonValObj));
columnValMap.put((String)key,JsonValObj);
return columnValM
* 将json对象转换为map集合,通过此方法获取存放map集合键的list集合
* @param obj
public static List&Object& mapKeys(Object obj){
List&Object& keysList = new ArrayList&Object&();
Map&String,Object& columnValMap = new HashMap&String,Object&();
String columnStr = "column";
if(obj instanceof JSONArray){
List&Map&String, Object&& jsonObjList = new ArrayList&Map&String, Object&& ();
jsonObjList = (List&Map&String, Object&&) JsonToList((JSONArray) obj);
columnValMap =(Map&String, Object&) (jsonObjList.get(0));
//以上三句可优化为如下一句
//columnValMap =(Map&String, Object&)(((List&Object&)JsonToList((JSONArray) obj)).get(0));
}else if(obj instanceof JSONObject){
columnValMap =JsonToMap((JSONObject) obj);
keysList.add(obj);
for(int i=0;i&columnValMap.keySet().size();i++){
keysList.add(columnStr+(i+1));
System.out.println(keysList.size());
return keysL
2.通过使用谷歌的Gson来处理json字符串,谷歌的Gson针对封装的javaBean处理起来很方便,但对于未封装的json字符串需要找到技巧处理起来也才能顺手。
使用谷歌的Gson当然也需要jar包的支持,这需要一个jar包:Gson.jar
下载地址:/p/google-gson/downloads/detail?name=google-gson-2.2.4-release.zip
示例:将通过js获取的json字符串转换为Map、List集合,代码如下:
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import com.google.gson.G
public class JSONHelper {
private Gson gson = new Gson();
* 将json对象转换为map集合,通过此方法获取存放map集合键的list集合
* @param obj
public static List&Object& mapKeys(Map&?,?& map){
List&Object& keysList = new ArrayList&Object&();
String columnStr="column";
for(int i=0;i&map.keySet().size();i++){
keysList.add(columnStr+(i+1));
System.out.println(keysList.size());
return keysL
* 将传入的json字符串转换为元素为map集合的List集合
* @param jsonArrStr
public static List&Map&String, Object&& jsonObjList(String jsonArrStr) {
List&Map&String, Object&& jsonObjList = new ArrayList&Map&String, Object&&();
List&?& jsonList = Test.jsonToList(jsonArrStr);
Gson gson = new Gson();
for (Object object : jsonList) {
String jsonStr = gson.toJson(object);
Map&?, ?& json = Test.jsonToMap(jsonStr);
jsonObjList.add((Map&String, Object&) json);
return jsonObjL
* 将传入的json字符串解析为List集合
* @param jsonStr
public static List&?& jsonToList(String jsonStr) {
List&?& ObjectList =
Gson gson = new Gson();
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken&List&?&&() {}.getType();
ObjectList = gson.fromJson(jsonStr, type);
return ObjectL
* 将传入的json字符串解析为Map集合
* @param jsonStr
public static Map&?, ?& jsonToMap(String jsonStr) {
Map&?, ?& ObjectMap =
Gson gson = new Gson();
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken&Map&?,?&&() {}.getType();
ObjectMap = gson.fromJson(jsonStr, type);
return ObjectM
3.使用最轻量级的org.json.jar实现json字符串和java对象之间的互转
所需jar包:org.json.jar
下载地址:www.json.org
或第三方:/store/info/111
同样实现对json字符串转换为Map、List集合,代码如下:
import java.util.ArrayL
import java.util.HashM
import java.util.I
import java.util.L
import java.util.M
import org.json.JSONA
import org.json.JSONE
import org.json.JSONO
* 此类是处理json字符串的工具类
* @author xiaomeng
public class JSONHelper {
* 将json字符串转换为List集合
* @param jsonArrStr
public static List&Map&String, Object&& jsonObjList(String jsonArrStr) {
List&Map&String, Object&& jsonList = new ArrayList&Map&String, Object&&();
JSONArray jsonArr =
jsonArr = new JSONArray(jsonArrStr);
jsonList = (List&Map&String, Object&&)JSONHelper.jsonToList(jsonArr);
} catch (JSONException e) {
System.out.println("Json字符串转换异常!");
e.printStackTrace();
return jsonL
* 将json对象的键值存放在集合,映射table的column
* @param map
public static List&String& jsonMapKeysList(Map&?, ?& map) {
List&String& jsonjsonList = new ArrayList&String&();
String columnStr = "column";
for (int i = 0; i & map.keySet().size(); i++) {
jsonjsonList.add(columnStr + (i + 1));
System.out.println(jsonjsonList.size());
return jsonjsonL
* 将传递近来的json数组转换为List集合
* @param jsonArr
* @return www.it165.net
* @throws JSONException
private static List&?& jsonToList(JSONArray jsonArr)
throws JSONException {
List&Object& jsonToMapList = new ArrayList&Object&();
for (int i = 0; i & jsonArr.length(); i++) {
Object object = jsonArr.get(i);
if (object instanceof JSONArray) {
jsonToMapList.add(JSONHelper.jsonToList((JSONArray) object));
} else if (object instanceof JSONObject) {
jsonToMapList.add(JSONHelper.jsonToMap((JSONObject) object));
jsonToMapList.add(object);
return jsonToMapL
* 将传递近来的json对象转换为Map集合
* @param jsonObj
* @throws JSONException
@SuppressWarnings("unchecked")
private static Map&String, Object& jsonToMap(JSONObject jsonObj)
throws JSONException {
Map&String, Object& jsonMap = new HashMap&String, Object&();
Iterator&String& jsonKeys = jsonObj.keys();
while (jsonKeys.hasNext()) {
String jsonKey = jsonKeys.next();
Object jsonValObj = jsonObj.get(jsonKey);
if (jsonValObj instanceof JSONArray) {
jsonMap.put(jsonKey, JSONHelper.jsonToList((JSONArray) jsonValObj));
} else if (jsonValObj instanceof JSONObject) {
jsonMap.put(jsonKey, JSONHelper.jsonToMap((JSONObject) jsonValObj));
jsonMap.put(jsonKey, jsonValObj);
return jsonM
以上三种常用的json和java对象之间的互相转换方法各有其特点,根据我的小经验,现将其优缺点总如下,供参考!
1.json_lib json解析框架
优点:各种复杂json格式和对json处理的一般需求都可以做到
缺点:所需支持的jar文件较多,并且关于jar包版本或许会出现一些杂七杂八的问题
2.谷歌Gson对json的解析:
优点:(1)。可以谷歌的Gson就是为处理java对象和json之间转换开发的框架,其可以很简单、方便的对封装的java对象和json格式文本之间的转换,包括java工具类集合之间的转换也很方便;(2)。相对json_lib框架来说,只需要一个Gson.jar就可以,需要jar文件数量少;
缺点:由于其相对来说偏向于处理java对象和json之间的转换,所以其只简单的处理json字符串和集合类之间的转换稍微需要一个过渡,就是使用反射确定转换的java对象类型。
3.org.json框架
优点:在这三者之中,其实最轻量级、同谷歌Gson一样所需jar文件也是最少的一种方法,并且其在处理json字符串到java集合的转黄相对简便缺点:相对Gson处理java对象和json之间的转换比较费事综述:这三种解析json的方法各有优缺点,具体可根据自己需求选择使用。
浏览: 255761 次
来自: 北京
请问如果重复提交了三次呢?能避免吗?
是不是有病?
楼主共享了不?
多少钱?源码可以卖吗?如有出售意向,可以联系ourfirebi ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'json字符串转为map结构,复杂json字符串转为map结构 - lightClouds917的博客 - CSDN博客
json字符串转为map结构,复杂json字符串转为map结构
json转map通用方法
开发的时候,经常会遇到json转为Map的需求,简单的json还好处理,如果json比较复杂,转换后为Map嵌套结构,就比较难处理。比如:将下面的json字符串转为Map接口:
&IR_SRCNAME&: &车主之家&,
&IR_SITENAME&: &车主之家&,
&IR_AUTHORS&: null,
&IR_URLTITLE&: &2017年4月份高尔夫销量11798台, 同比下降20.24%&,
&IR_URLNAME&: &/a/72148.html&,
&IR_ABSTRACT&: & 2017年4月份高尔夫销量11798台 &,
&IR_URLTIME&: & 23:35:00&,
&IR_HKEYBBSNUM&: &&,
&IR_CHANNEL&: &新闻_汽车新闻&,
&COMPANY_RISK_CONN&: &汽车之家股份有限公司_财务风险\偿债能力\营运资本_18;&,
&ZFM&: &负面&
&path&: &/cloud/wsu/queryByKeyword!get_by_fullname.action&,
&rstcode&: &0000&,
&rstcount&: 19476,
&cmpname&: &汽车之家股份有限公司&,
&shortname&: &汽车之家&,
&rstmsg&: &查询成功&
看完发现,这个json字符串转为map后,应该是Map嵌套Map结构的。怎么办呢?
这里提供一方法,可以当作工具类,只要json字符串没有问题,嵌套几层都可以。
import net.sf.json.JSONA
import net.sf.json.JSONObject
public class Json2Map {
* 将json字符串转为Map结构
* 如果json复杂,结果可能是map嵌套map
* @param jsonStr 入参,json格式字符串
* @return 返回一个map
public static Map&String, Object& json2Map(String jsonStr) {
Map&String, Object& map = new HashMap&&();
if(jsonStr != null && !&&.equals(jsonStr)){
//最外层解析
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(json2Map(json2.toString()));
map.put(k.toString(), list);
map.put(k.toString(), v);
用上面这个方法处理完后,打印这个map,结果如下:
{rstcount=19476, path=/cloud/wsu/queryByKeyword!get_by_fullname.action,&data=[{ZFM=负面, COMPANY_RISK_CONN=汽车之家股份有限公司_财务风险偿债能力营运资本_18;, IR_URLTIME= 23:35:00, IR_URLTITLE=2017年4月份高尔夫销量11798台, 同比下降20.24%, IR_SRCNAME=车主之家, IR_SITENAME=车主之家, IR_URLNAME=/a/72148.html, IR_ABSTRACT= 2017年4月份高尔夫销量11798台 , IR_HKEYBBSNUM=, IR_AUTHORS=null, IR_CHANNEL=新闻_汽车新闻}],&rstcode=0000,&cmpname=汽车之家股份有限公司,&shortname=汽车之家,&rstmsg=查询成功}&可以看到结果是一个Map嵌套一个Map。可以把这个方法存起来,遇到json转Map时,直接使用就好了。
注意:这里的json字符串中很多双引号,用eclipse开发,可能会涉及转义问题,但是idea就不用,把这个json传扔到idea里,直接就转义了这些双引号,如下:
String jsonp = &{\n& +
&\&data\&: [\n& +
\&IR_SRCNAME\&: \&车主之家\&,\n& +
\&IR_SITENAME\&: \&车主之家\&,\n& +
\&IR_AUTHORS\&: null,\n& +
\&IR_URLTITLE\&: \&2017年4月份高尔夫销量11798台, 同比下降20.24%\&,\n& +
\&IR_URLNAME\&: \&/a/72148.html\&,\n& +
\&IR_ABSTRACT\&: \& 2017年4月份高尔夫销量11798台 \&,\n& +
\&IR_URLTIME\&: \& 23:35:00\&,\n& +
\&IR_HKEYBBSNUM\&: \&\&,\n& +
\&IR_CHANNEL\&: \&新闻_汽车新闻\&, \n& +
\&COMPANY_RISK_CONN\&: \&汽车之家股份有限公司_财务风险\\偿债能力\\营运资本_18;\&,\n& +
\&ZFM\&: \&负面\&\n& +
\&path\&: \&/cloud/wsu/queryByKeyword!get_by_fullname.action\&,\n& +
\&rstcode\&: \&0000\&,\n& +
\&rstcount\&: 19476,\n& +
\&cmpname\&: \&汽车之家股份有限公司\&,\n& +
\&shortname\&: \&汽车之家\&,\n& +
\&rstmsg\&: \&查询成功\&\n& +
}\n&;上面代码直接复制使用就好,不用额外处理。
我的热门文章博客分类:
json-lib-2.4-jdk15.jar
ezmorph-1.0.6.jar
xom-1.2.1.jar
commons-lang-2.1.jar
commons-io-1.3.2.jar
jaxen-1.1.jar
输入xml文件,输出JSON对象
package com.cash.
import java.io.IOE
import java.io.InputS
import mons.io.IOU
import net.sf.json.JSON;
import net.sf.json.xml.XMLS
public class Test {
public static void ConvertXMLtoJSON()
InputStream is = ConvertXMLtoJSON.class.getResourceAsStream("sample.xml");
xml = IOUtils.toString(is);
System.out.println(xml);
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(xml);
System.out.println(json.toString(1));
} catch (IOException e) {
e.printStackTrace();
public static void main(String[] args) {
ConvertXMLtoJSON();
* 将xml字符串转换为JSON对象
* @param xmlFile xml字符串
* @return JSON对象
public JSON getJSONFromXml(String xmlString) {
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(xmlString);
* 将xmlDocument转换为JSON对象
* @param xmlDocument XML Document
* @return JSON对象
public JSON getJSONFromXml(Document xmlDocument) {
String xmlString = xmlDocument.toString();
return getJSONFromXml(xmlString);
* 将xml字符串转换为JSON字符串
* @param xmlString
* @return JSON字符串
public String getJSONStringFromXml(String xmlString ) {
return getJSONFromXml(xmlString).toString();
* 将xmlDocument转换为JSON字符串
* @param xmlDocument XML Document
* @return JSON字符串
public String getXMLtoJSONString(Document xmlDocument) {
return getJSONStringFromXml(xmlDocument.toString());
* 读取XML文件准换为JSON字符串
* @param xmlFile
* @return JSON字符串
public String getXMLFiletoJSONString(String xmlFile) {
InputStream is = JsonUtil.class.getResourceAsStream(xmlFile);
JSON json =
xml = IOUtils.toString(is);
XMLSerializer xmlSerializer = new XMLSerializer();
json = xmlSerializer.read(xml);
} catch (IOException e) {
e.printStackTrace();
return json.toString();
* 将Java对象转换为JSON格式的字符串
* @param javaObj
POJO,例如日志的model
* @return JSON格式的String字符串
public static String getJsonStringFromJavaPOJO(Object javaObj) {
return JSONObject.fromObject(javaObj).toString(1);
* 将Map准换为JSON字符串
* @param map
* @return JSON字符串
public static
String getJsonStringFromMap(Map&?, ?& map) {
JSONObject object = JSONObject.fromObject(map);
return object.toString();
(406.7 KB)
下载次数: 1028
下载次数: 721
下载次数: 664
(202.9 KB)
下载次数: 618
(155.4 KB)
下载次数: 774
浏览 16573
论坛回复 /
(21 / 13916)
文不对题啊,
只有xml-&json
没看到json-&xml
怎么叫 相互转换呢?
public String getXMLFiletoJSONString(String xmlFile) {&
好贴。。。学习到了。这几天正好在考虑json和XML的转化问题,最然说现在是.net开发为主,但是java是我的根,我不知道我用java的思想去写c#有没有什么忌讳,希望楼主指导一下
不好意思,我不会C#。我主要的开发语言还是Java。相互学习吧 哈哈
经测试,所需的jar有误,应该为
commons-beanutils-1.7.0.jar
commons-collections-3.2.1.jar
commons-lang-2.3.jar
commons-logging-1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
其中commons-collections-3.2.1.jar版本如果不对会报错误--org/apache/commons/collections/map/ListOrderedMap这个异常
谢谢你的回复,我没有注意到
楼主自己写的哪部分功能?
son-lib-2.4-jdk15.jar中感觉都包含了json的相关转换功能啊
参考
http://json-lib.sourceforge.net/
是的,Json-lib 相关转换已经很全了。大多是通过 JSONObject.fromObject(jsonString)
可以准换为javad对象,map,数组等。我是根据本身的业务需求做了些封装。我的需求很简单:将xml document转换为JSON对象,再准换为MongoDB的DBObject对象,然后存放到MongoDB中就可以了。
import com.cash.xml.ConvertXMLtoJSON 这个是那个包下面的呀,Sorry,贴错了。已经去除掉。
贴几个jar包有啥用呢,映射规则是啥总得说明一下吧。这几个是json-lib-2.4-jdk15.jar的依赖包。贴jar包就是方便一些童鞋的下载。
用Xstream不是很好嘛,几行代码就搞定,扩展性也不弱你说的对。不过这里我是想把xml Document转换为JSON对象,作为一个整体存储的。
& 上一页 1
浏览: 243309 次
来自: 水星
czwq2001 写道我带hbase执行的时候出现以下异常,不 ...
geilivable
不起作用。希望LZ以后自测后再发,这样很容易误导初学者
你好,我到这一步的时候,echo &test mes ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'鍗氬?鍒嗙被锛

我要回帖

更多关于 json转化为字符串 的文章

 

随机推荐