JSON字符串与各种数据类型之间的相互转换

1 Json与List之间的相互转换

1.1 谷歌的Gson.jar

//list转换为json
Gson gson = new Gson();  
List<Person> persons = new ArrayList<Person>();  
String str = gson.toJson(persons);
//json转换为list
Gson gson = new Gson();  
List<Person> persons = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());

1.2 阿里的fastJson.jar

//list转换为json
List<CustPhone> list = new ArrayList<CustPhone>();
String str=JSON.toJSON(list).toString();
//json转换为list
List<Person> list = new ArrayList<Person>();  
list = JSONArray.parseArray(jsonArray, Person.class); 

2 对象pojo与Json的相互转换

public class JsonUtil {
    /**
     * JSON 转 POJO
     */
     public static <T> T getObject(String pojo, Class<T> tclass) {
            try {
                return JSONObject.parseObject(pojo, tclass);
            } catch (Exception e) {
                log.error(tclass + "转 JSON 失败");
            }
            return null;
     }
     /**
      * POJO 转 JSON    
      */
     public static <T> String getJson(T tResponse){
         String pojo = JSONObject.toJSONString(tResponse);
         return pojo;
     }
}

3 JSONArray与JSONObject的区别

3.1 JSONObject和JSONArray的数据表示形式

JSONObject的数据是用 { } 来表示的,

​ 例如: { “id” : “123”, “age” : “12”, “name” : “小明”, “time” : 2020-06-06}

JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , … , { } ] 来表示

​ 例如: [ { “id” : “123”, “age” : “12”, “name” : “小王” } , { “id” : ''321", “age” : ''12",“name”:“小刘” } ]
可以看到一个很明显的区别,一个用的是 { } ,一个最外面用的是 [ ] ;JsonArray包含多个JsonObject

3.2 JSONObject和Json字符串之间的相互转换

//JSONObject转json字符串
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "yyy");
jsonObject.put("age", 25);
jsonObject.put("sex", "男");
jsonObject.put("school", "天津大学");
String jsonStr = JSONObject.toJSONString(jsonObject);
System.out.println(jsonStr);

执行结果:

{"school":"天津大学","sex":"男","name":"yyy","age":25}
//json字符串转JSONObject
String jsonStr = "{\"school\":\"天津大学\",\"sex\":\"男\",\"name\":\"yyy\",\"age\":25}";
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.getInteger("age"));

执行结果:

yyy
25

4 JSON字符串自动转换

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 : jsonObject.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: mapObj.entrySet()){  
            System.out.println(((Map.Entry)map).getKey()+"  "+((Map.Entry)map).getValue());  
        }   
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值