在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。
一.fastjson实例
JsonUtil.java
package com.study; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; public class JsonUtil { private static List<Map<String, Object>> json2List(Object json) { JSONArray jsonArr = (JSONArray) json; List<Map<String, Object>> arrList = new ArrayList<Map<String, Object>>(); for (int i = 0; i < jsonArr.size(); ++i) { arrList.add(strJson2Map(jsonArr.getString(i))); } return arrList; } public static Map<String, Object> strJson2Map(String json) { JSONObject jsonObject = JSONObject.parseObject(json); Map<String, Object> resMap = new HashMap<String, Object>(); Iterator<Entry<String, Object>> it = jsonObject.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, Object> param = (Map.Entry<String, Object>) it.next(); if (param.getValue() instanceof JSONObject) { resMap.put(param.getKey(), strJson2Map(param.getValue().toString())); } else if (param.getValue() instanceof JSONArray) { resMap.put(param.getKey(), json2List(param.getValue())); } else { resMap.put(param.getKey(), JSONObject.toJSONString(param.getValue(), SerializerFeature.WriteClassName)); } } return resMap; } }
JsonToMap.java
package com.study; import java.util.List; import java.util.Map; public class JsonToMap { private static String jsonStr = "{\"list\":[{\"aNum\":3,\"bNum\":1}],\"resCode\":\"0\",\"resMessage\":\"成功\"}"; public static void main(String[] args) { try { Map<String, Object> resMap = JsonUtil.strJson2Map(jsonStr); List<Map<String, Object>> resList = (List<Map<String, Object>>) resMap.get("list"); for (int i = 0; i < resList.size(); i++) { Map<String, Object> res = (Map<String, Object>) resList.get(i); String aNum = (String) res.get("aNum"); double totalActualDouble = Double.parseDouble(aNum); System.out.println(totalActualDouble); } System.out.println(resMap); } catch (Exception e) { System.out.println("Exception:" + e.getMessage()); } } }
依赖JAR包:fastjson-1.1.26.jar
二.net.sf.json实例
JsonUtil.java
package com.study; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JsonUtil { public final static Map strJson2Map(String jsonStr) throws ParseException { JSONObject jsonObject = new JSONObject(jsonStr); return json2Map(jsonObject); } public final static Map json2Map(JSONObject jsonObject) { Map resultMap = new HashMap(); Iterator iterator = jsonObject.keys(); while (iterator.hasNext()) { String key = (String) iterator.next(); Object value = jsonObject.get(key); if (value instanceof JSONObject) { value = json2Map((JSONObject) value); resultMap.put(key, value); } else if (value instanceof JSONArray) { value = json2List((JSONArray) value); resultMap.put(key, value); } else { resultMap.put(key, jsonObject.getString(key)); } } return resultMap; } public final static List json2List(JSONArray jsonArray) { List resultList = new ArrayList(); for (int i = 0; i < jsonArray.length(); i++) { Object value = jsonArray.get(i); if (value instanceof JSONObject) { value = json2Map((JSONObject) value); } else if (value instanceof JSONArray) { value = json2List((JSONArray) value); } resultList.add(value); } return resultList; } }
JsonToMap.java
package com.study; import java.util.List; import java.util.Map; public class JsonToMap { private static String jsonStr = "{\"list\":[{\"aNum\":3,\"bNum\":1}],\"resCode\":\"0\",\"resMessage\":\"成功\"}"; public static void main(String[] args) { try { Map resMap = JsonUtil.strJson2Map(jsonStr); List resList = (List) resMap.get("list"); for (int i = 0; i < resList.size(); i++) { Map res = (Map) resList.get(i); String aNum = (String) res.get("aNum"); double totalActualDouble = Double.parseDouble(aNum); System.out.println(totalActualDouble); } System.out.println(resMap); } catch (Exception e) { System.out.println("Exception:" + e.getMessage()); } } }
依赖JAR包:json-lib-0.7.1.jar、commons-logging-1.0.4.jar
三.知识扩展
1.fastjson如何将json数据串转换为Object[]时指定各个数据项的数据类型
Object[] o=new Object[]{"1",2,(short)3,4l,5.0d,6.0f,0.3d,0.3f};
此时数组o中各数据项的类型是,如下:
{String.class,Integer.class,Short.class,Double.class,Float.class,Double.class,Float.class}
经过如下三个步骤:
JSON json=(JSON)JSONObject.toJSON(o); String js=json.toString(); JSON json1=(JSON)JSONObject.parse(js);
此时,json1中的数据相对类型是,如下:
{String.class,Integer.class,Integer.class,Integer.class,Integer.class,BigDecimal.class,BigDecimal.class}
如何才能转会原来的数据类型呢?
方案一(推荐使用,如上实例就是采用这种方式):
转换成json串的时候带入类型信息:
String j=JSONObject.toJSONString(o,SerializerFeature.WriteClassName);
转换结果是这样的["1",2,3S,4L,5D,6F,0.3D,0.3D,0.3F],这样,parse的时候就可以转换成相应的类型。
方案二:
转换的时候加入类型信息:
Class[] c={String.class,Integer.class,Short.class,Long.class,Double.class,Float.class,Double.class,Float.class}; List<Object> json1=(List<Object>)JSONObject.parseArray(js, c);
2.net.sf.json如何将json数据串转换为Object[]时指定各个数据项的数据类型
对于统一操作,建议采用上面fastjson推荐的方法思路,先将其转换成String类型,再parse解析成需要的类型,如net.sf.json实例所示。但如果JSON串内容较少,也可以采用如下获取指定类型数据的方法:
JSONObject json = JSONObject.fromObject(jsonString) System.out.println(json.getString("Rel_ProName")); System.out.println(json.getDouble("Rel_taxSumprice"));
PS:当从一个 jsonObject 中去值时,遇到两个方法,optDouble和getDouble。getDouble("key") 取值不存在或者类型不对报错,而optDouble("key",0) 取值不存在返回默认值。
相关推荐
在提供的文件内容中,提到了一种使用org.json库中的JSONObject类实现JSON字符串到Map对象转换的方法。具体步骤如下: 1. 首先,需要将JSON字符串转换为org.json库中的JSONObject对象。这一步可以通过JSONObject类...
本文将详细介绍如何将JSON字符串直接转换为Java对象,特别是涉及到多层List集合的情况。在本例中,我们将使用`net.sf.json.JSONObject`类来实现这一功能。 首先,确保你的项目中已经引入了必要的库。在使用`...
// 转换Map List<String> myList = Arrays.asList("Apple", "Banana", "Cherry"); String jsonList = listToJsonString(myList); // 转换List ``` 在实际应用中,这样的工具类可以帮助开发者更方便地处理JSON数据...
- **Java中的JSON转换**:在Java中,我们可以使用如Jackson、Gson、Fastjson等库将Java对象转换为JSON字符串。例如,Jackson库的`ObjectMapper`类提供了`writeValueAsString()`方法,可以将Java对象转换为JSON字符...
如果值是另一个JSON对象或数组,你需要再次进行类型转换。例如,如果`value`是一个`Map`,你可以这样访问其属性: ```java if (value instanceof Map) { @SuppressWarnings("unchecked") Map, Object> nestedMap ...
在实际项目中,Google Gson库提供了丰富的功能,可以满足大部分JSON转换需求。通过熟练掌握Gson的使用,开发者可以更高效地进行数据的序列化和反序列化操作。在`hsun_gson`这个压缩包文件中,可能包含了示例源码和...
然后使用`JSONArray.fromObject(jsonString)`将JSON数组字符串转换为`JSONArray`,接着创建一个目标类型数组,并通过遍历`JSONArray`,将每个JSON对象转换为Java对象并填充到数组中。 `setDataFormat2JAVA()`方法未...
在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...
1. JSON对象与数据结构:JSON对象由键值对组成,键(key)必须是字符串,而值(value)可以是多种数据类型,包括字符串、数字、布尔值、数组、null以及嵌套的JSON对象或数组。例如: ```json { "name": "张三", ...
Map是许多编程语言(如Java、Python等)中的一个内置数据类型,用于存储键值对,而Json则是一种轻量级的数据交换格式,常用于Web服务的数据传输。本教程将详细介绍如何将Map转换为Json,并提供一个简单的Json教程。 ...
遍历JSON对象,根据元素类型创建对应的数据结构。 ```javascript function processJson(json) { return json.children.map(child => { if (child.type === 'tag') { return { type: 'tag', name: child.tag,...
以上就是JSON转换的一些常见方法,这些方法在处理JSON数据时非常实用。在实际开发中,确保正确处理异常,并根据需要选择合适的方法进行数据的序列化和反序列化。理解并熟练掌握这些转换技巧,对于提升编程效率和优化...
通过使用Jackson库,我们可以方便地在JSON和Java对象之间进行转换,无论是简单的数据类型还是复杂的对象结构。在实际项目中,根据需求选择适合的JSON库,并熟练掌握其用法,能够提高开发效率,使数据处理更为便捷。
// 解析JSON字符串到Map, City> Map, City> cityMap = gson.fromJson(jsonStr, new TypeToken<Map, City>>(){}.getType()); // 输出城市名称 for (Map.Entry, City> entry : cityMap.entrySet()) { System.out...
- 数据转换时需注意类型安全,例如,从JSON字符串转换到Map时,需要确认Map的键值类型是否与预期一致。 - 如果Map或List包含自定义对象,需要确保这些对象实现了序列化接口,或者使用适配器(如Gson的`@...
而在Java编程语言中,处理JSON数据通常涉及到将JSON字符串或对象转换为Java对象(如`Map`、`List`、自定义Java Bean类等),以及反之亦然的过程。 #### JSON与Java数据类型的对应关系 1. **JSON Object <-> Java ...
是Java开发中处理JSON数据的一个工具,它提供了一种方便的方式来转换Java对象和JSON字符串,使得数据交换变得更加简单。通过理解和熟练使用`JSONObject`,开发者可以更好地应对前后端交互的需求。
如果你的JSON字符串包含数组,可以转换为Java的集合类型,如`List`或`Map`。例如,如果你有以下JSON: ```json [ { "name": "John", "age": 30 }, { "name": "Jane", "age": 28 } ] ``` 你可以这样转换: ...
`getDTO`方法接收一个JSON字符串和一个Java类的Class对象作为参数,其目的是将JSON字符串解析成对应的Java对象。首先,通过`JSONObject.fromObject(jsonString)`将JSON字符串转换为`JSONObject`,然后使用`...
9. **类型转换和条件判断**: 在`parseJSON2Map()`方法中,使用`instanceof`关键字检查值是否为`JSONArray`类型,从而决定是直接放入Map还是进行递归解析。 总之,这段代码的核心功能是将JSON格式的数据转换为Java的...