`

JSON串转换成Map以及如何转换到对应的数据类型

阅读更多

        在实际开发中,难免会碰到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) 取值不存在返回默认值。

分享到:
评论

相关推荐

    将JSON字符串转换成Map对象的方法

    在提供的文件内容中,提到了一种使用org.json库中的JSONObject类实现JSON字符串到Map对象转换的方法。具体步骤如下: 1. 首先,需要将JSON字符串转换为org.json库中的JSONObject对象。这一步可以通过JSONObject类...

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    本文将详细介绍如何将JSON字符串直接转换为Java对象,特别是涉及到多层List集合的情况。在本例中,我们将使用`net.sf.json.JSONObject`类来实现这一功能。 首先,确保你的项目中已经引入了必要的库。在使用`...

    androidmap转json字符串、list转json字符串工具类.zip

    // 转换Map List&lt;String&gt; myList = Arrays.asList("Apple", "Banana", "Cherry"); String jsonList = listToJsonString(myList); // 转换List ``` 在实际应用中,这样的工具类可以帮助开发者更方便地处理JSON数据...

    对象转换成JSON和Map

    - **Java中的JSON转换**:在Java中,我们可以使用如Jackson、Gson、Fastjson等库将Java对象转换为JSON字符串。例如,Jackson库的`ObjectMapper`类提供了`writeValueAsString()`方法,可以将Java对象转换为JSON字符...

    Java读取json文件,并转化为map取值

    如果值是另一个JSON对象或数组,你需要再次进行类型转换。例如,如果`value`是一个`Map`,你可以这样访问其属性: ```java if (value instanceof Map) { @SuppressWarnings("unchecked") Map, Object&gt; nestedMap ...

    利用Google Gson实现JSON字符串和对象之间相互转换

    在实际项目中,Google Gson库提供了丰富的功能,可以满足大部分JSON转换需求。通过熟练掌握Gson的使用,开发者可以更高效地进行数据的序列化和反序列化操作。在`hsun_gson`这个压缩包文件中,可能包含了示例源码和...

    处理JSON日期转换

    然后使用`JSONArray.fromObject(jsonString)`将JSON数组字符串转换为`JSONArray`,接着创建一个目标类型数组,并通过遍历`JSONArray`,将每个JSON对象转换为Java对象并填充到数组中。 `setDataFormat2JAVA()`方法未...

    利用java反射将json字符串转成对象.zip

    在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...

    json格式转换工具类

    1. JSON对象与数据结构:JSON对象由键值对组成,键(key)必须是字符串,而值(value)可以是多种数据类型,包括字符串、数字、布尔值、数组、null以及嵌套的JSON对象或数组。例如: ```json { "name": "张三", ...

    Map转成json

    Map是许多编程语言(如Java、Python等)中的一个内置数据类型,用于存储键值对,而Json则是一种轻量级的数据交换格式,常用于Web服务的数据传输。本教程将详细介绍如何将Map转换为Json,并提供一个简单的Json教程。 ...

    uni-app、微信小程序 富文本内容利用html2json转换成对应类似控件 rich-text 对应的数组资源格式!

    遍历JSON对象,根据元素类型创建对应的数据结构。 ```javascript function processJson(json) { return json.children.map(child =&gt; { if (child.type === 'tag') { return { type: 'tag', name: child.tag,...

    json常用的转换方法

    以上就是JSON转换的一些常见方法,这些方法在处理JSON数据时非常实用。在实际开发中,确保正确处理异常,并根据需要选择合适的方法进行数据的序列化和反序列化。理解并熟练掌握这些转换技巧,对于提升编程效率和优化...

    json 与java之间数据的转换

    通过使用Jackson库,我们可以方便地在JSON和Java对象之间进行转换,无论是简单的数据类型还是复杂的对象结构。在实际项目中,根据需求选择适合的JSON库,并熟练掌握其用法,能够提高开发效率,使数据处理更为便捷。

    Gson解析(List和Map)格式json数据 - CSDN博客1

    // 解析JSON字符串到Map, City&gt; Map, City&gt; cityMap = gson.fromJson(jsonStr, new TypeToken&lt;Map, City&gt;&gt;(){}.getType()); // 输出城市名称 for (Map.Entry, City&gt; entry : cityMap.entrySet()) { System.out...

    java转换xml、list、map和json[借鉴].pdf

    - 数据转换时需注意类型安全,例如,从JSON字符串转换到Map时,需要确认Map的键值类型是否与预期一致。 - 如果Map或List包含自定义对象,需要确保这些对象实现了序列化接口,或者使用适配器(如Gson的`@...

    JSON与JAVA数据的转换

    而在Java编程语言中,处理JSON数据通常涉及到将JSON字符串或对象转换为Java对象(如`Map`、`List`、自定义Java Bean类等),以及反之亦然的过程。 #### JSON与Java数据类型的对应关系 1. **JSON Object &lt;-&gt; Java ...

    net.sf.json.JSONObject实现Object对象与Json字符串的互转

    是Java开发中处理JSON数据的一个工具,它提供了一种方便的方式来转换Java对象和JSON字符串,使得数据交换变得更加简单。通过理解和熟练使用`JSONObject`,开发者可以更好地应对前后端交互的需求。

    json字符串轻松转换成对象

    如果你的JSON字符串包含数组,可以转换为Java的集合类型,如`List`或`Map`。例如,如果你有以下JSON: ```json [ { "name": "John", "age": 30 }, { "name": "Jane", "age": 28 } ] ``` 你可以这样转换: ...

    json转换java常用工具类

    `getDTO`方法接收一个JSON字符串和一个Java类的Class对象作为参数,其目的是将JSON字符串解析成对应的Java对象。首先,通过`JSONObject.fromObject(jsonString)`将JSON字符串转换为`JSONObject`,然后使用`...

    json手动转map和list1

    9. **类型转换和条件判断**: 在`parseJSON2Map()`方法中,使用`instanceof`关键字检查值是否为`JSONArray`类型,从而决定是直接放入Map还是进行递归解析。 总之,这段代码的核心功能是将JSON格式的数据转换为Java的...

Global site tag (gtag.js) - Google Analytics