用 FastJSON 将 JSON 字符串转换为 Map

本文介绍使用阿里巴巴FastJSON库将JSON字符串转换为Java Map对象的六种方法,并提供了详细的代码示例。

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

本文是利用阿里巴巴封装的FastJSON来转换json字符串的。例子如下:

import com.alibaba.fastjson.JSON;  
import com.alibaba.fastjson.JSONObject;  
import java.util.Map;  
  
/** 
 * JSON字符串自动转换 
 * Created by zkn on 2016/8/22. 
 */  
public class JsonToMapTest01 {  
  
    public static void main(String[] args){  
  
        String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}";  
        //第一种方式  
        Map maps = (Map)JSON.parse(str);  
        System.out.println("这个是用JSON类来解析JSON字符串!!!");  
        for (Object map : maps.entrySet()){  
            System.out.println(((Map.Entry)map).getKey()+"     " + ((Map.Entry)map).getValue());  
        }  
        //第二种方式  
        Map mapTypes = JSON.parseObject(str);  
        System.out.println("这个是用JSON类的parseObject来解析JSON字符串!!!");  
        for (Object obj : mapTypes.keySet()){  
            System.out.println("key为:"+obj+"值为:"+mapTypes.get(obj));  
        }  
        //第三种方式  
        Map mapType = JSON.parseObject(str,Map.class);  
        System.out.println("这个是用JSON类,指定解析类型,来解析JSON字符串!!!");  
        for (Object obj : mapType.keySet()){  
            System.out.println("key为:"+obj+"值为:"+mapType.get(obj));  
        }  
        //第四种方式  
        /** 
         * JSONObject是Map接口的一个实现类 
         */  
        Map json = (Map) JSONObject.parse(str);  
        System.out.println("这个是用JSONObject类的parse方法来解析JSON字符串!!!");  
        for (Object map : json.entrySet()){  
            System.out.println(((Map.Entry)map).getKey()+"  "+((Map.Entry)map).getValue());  
        }  
        //第五种方式  
        /** 
         * JSONObject是Map接口的一个实现类 
         */  
        JSONObject jsonObject = JSONObject.parseObject(str);  
        System.out.println("这个是用JSONObject的parseObject方法来解析JSON字符串!!!");  
        for (Object map : json.entrySet()){  
            System.out.println(((Map.Entry)map).getKey()+"  "+((Map.Entry)map).getValue());  
        }  
        //第六种方式  
        /** 
         * JSONObject是Map接口的一个实现类 
         */  
        Map mapObj = JSONObject.parseObject(str,Map.class);  
        System.out.println("这个是用JSONObject的parseObject方法并执行返回类型来解析JSON字符串!!!");  
        for (Object map: json.entrySet()){  
            System.out.println(((Map.Entry)map).getKey()+"  "+((Map.Entry)map).getValue());  
        }  
        String strArr = "{{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}," +  
                "{\"00\":\"zhangsan\",\"11\":\"lisi\",\"22\":\"wangwu\",\"33\":\"maliu\"}}";  
       // JSONArray.parse()  
        System.out.println(json);  
    }  
}  

 

转自:https://blog.youkuaiyun.com/zknxx/article/details/52281220

 

<think>好的,我现在需要帮助用户解决如何使用FastJson库将JSON字符串转换JSONArray的问题。首先,我得确认用户的具体需求。用户提到的是解析JSON字符串JSON数组,也就是JSONArray,所以需要找到FastJson中对应的方法。 根据引用内容,特别是引用[3]和[4]中的信息,FastJson提供了多种转换方法。比如引用[3]中提到将字符串为指定数据类型可以使用TypeReference,而JSONArray转换可能需要不同的方法。另外引用[2]中的示例代码展示了如何解析JSON字符串JSONObject,并从中获取JSONArray。这里的关键步骤应该是先解析整个字符串JSONObject,然后通过键获取对应的JSONArray,或者如果字符串本身就是数组结构,直接解析为JSONArray。 不过用户的问题是如何直接将字符串转换JSONArray,而不仅仅是获取其中的数组部分。所以可能需要判断字符串是否是数组格式。例如,如果字符串以方括号开头,那么它就是一个数组,应该用JSON.parseArray方法。如果字符串是对象中包含数组,那么可能需要先解析为JSONObject,再提取JSONArray。 需要检查用户提供的引用是否有相关方法。在引用[2]的示例中,用户使用JSON.parseObject来解析整个字符串JSONObject,然后通过get方法获取JSONArray。而引用[3]中提到了使用JSON.toJSONString将数据字符串,以及使用TypeReference来处理泛型对象。但用户需要的是字符串JSONArray,所以可能需要直接使用JSON.parseArray方法。 查看FastJson的文档,JSON.parseArray方法可以将JSON数组字符串直接转换JSONArray。例如,如果字符串是"[1,2,3]",那么使用JSON.parseArray(str)就会得到对应的JSONArray对象。而如果字符串是一个包含数组的对象,比如{"key":[1,2,3]},则需要先解析为JSONObject,再获取其中的JSONArray。 所以,用户的问题可能需要分两种情况处理:一种是字符串本身就是数组,另一种是数组嵌套在对象中。用户的问题可能更倾向于直接解析数组字符串,所以重点应放在JSON.parseArray的使用上。 此外,引用[3]中的代码示例提到了将数据转换JSON字符串,以及如何解析为指定类型,但用户需要的是解析为JSONArray,所以需要明确使用的方法和步骤。还需要注意依赖版本的问题,比如是否使用正确的FastJson版本,不过用户提供的引用中提到了不同版本的示例,可能需要统一建议使用合适的版本,比如引用[3]中的1.2.83或引用[4]中的fastjson2。 总结步骤应该是: 1. 添加FastJson依赖。 2. 使用JSON.parseArray方法将JSON数组字符串转换JSONArray。 3. 如果字符串是对象中的数组,先解析为JSONObject,再获取JSONArray。 接下来需要编写示例代码,确保语法正确,并展示两种情况。同时,需要提醒用户处理可能的异常,比如格式错误的情况。最后,生成相关问题,帮助用户进一步学习相关操作。</think>在Java中使用FastJsonJSON字符串转换JSONArray的步骤如下: ### 一、添加Maven依赖 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> ``` [^3] ### 二、基础转换方法 #### 1. 直接解析JSON数组字符串 如果字符串是标准的JSON数组格式(如`["a",1,true]`): ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; String jsonStr = "[\"Java\", \"Python\", \"C++\"]"; JSONArray jsonArray = JSON.parseArray(jsonStr); System.out.println(jsonArray.get(0)); // 输出:Java ``` #### 2. 从JSON对象中提取数组 若数组嵌套在JSON对象中(如`{"languages":["Java","Python"]}`): ```java String jsonStr = "{\"languages\":[\"Java\",\"Python\"]}"; JSONObject jsonObject = JSON.parseObject(jsonStr); JSONArray jsonArray = jsonObject.getJSONArray("languages"); System.out.println(jsonArray.get(1)); // 输出:Python ``` ### 三、泛型转换(复杂场景) 若需要转换包含泛型对象的数组(如`[{"name":"张三"},{"name":"李四"}]`): ```java import com.alibaba.fastjson.TypeReference; String jsonStr = "[{\"name\":\"张三\"},{\"name\":\"李四\"}]"; List<Map<String, String>> list = JSON.parseObject(jsonStr, new TypeReference<List<Map<String, String>>>(){}); System.out.println(list.get(0).get("name")); // 输出:张三 ``` [^4] ### 四、注意事项 1. 若字符串不符合JSON格式,会抛出`JSONException` 2. 推荐使用`JSON.isValid(jsonStr)`先验证格式 3. 处理数值类型时注意自动类型转换(如`"1"`可能为Integer)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值