Fast-Json 详解 — JSONObject与JSONArray的用法

FastJson:fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean,本篇章只讲述Json与对象之间的转换。至于fastJson在Spring或者jarx等框架中的使用本篇不作讲述。在使用Fast-Josn时,我们只需要引入阿里的fast-json库即可

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

Fastjson主要的API是 com.alibaba.fastjson.JSON,com.alibaba.fastjson.JSONObject和com.alibaba.fastjson.JSONArray。JSONObject表示JSON对象,JSONArray表示JSON数组,下面一个入门案例展示如何创建JSON对象和JSON数组。

		//创建JSON对象
		JSONObject jsonObject = new JSONObject();
		//put方法往json存储字段,key为String,Value为Object
		jsonObject.put("id", 1);
		jsonObject.put("name", "pharos");
		Map<String,Object> hashMap = new HashMap<String,Object>();
		hashMap.put("age", 25);
		hashMap.put("isWorker", true);
		//存储hashMap,其实将Map转换为JSON格式。
		jsonObject.putAll(hashMap);
		//fluentPut流式编程fluentPutAll也是如此,不再示例
		jsonObject.fluentPut("email", "[email protected]").put("qq", "813844896");
		//创建JSONArray对象
		JSONArray jsonArray = new JSONArray();
		//JSONArray中有add方法,往json数组中添加一个元素,
		//与add方法类似,还有fluentAdd方法,流式编程
		jsonArray.add("music");
		jsonArray.add(1,"running");
		//直接添加集合,添加多个元素
		//与add方法类似,还有fluentAddAll方法,流式编程
		jsonArray.addAll(new ArrayList<Object>());
		jsonArray.addAll(4, new ArrayList<Object>());
		jsonObject.put("hobby", jsonArray);

从上面的例子已经API可以看到JSONObject和JSONArray存储的数组均为Object,再从其取数据时,他们提供了get方法返回Object类型,如果知道存储的是具体的类型,还可以通过getXxx获取具体类型的数据。如下为其部分API的使用:

                //获取布尔型
		Boolean isWorker = jsonObject.getBoolean("isWorker");
		boolean isWorkerValue = jsonObject.getBooleanValue("isWorker");
		//获取整型
		Integer id = jsonObject.getInteger("id");
		int idValue = jsonObject.getIntValue("id");
		//获取字符串类型
		String name = jsonObject.getString("name");
		//获取Object类型
		Object qq = jsonObject.get("qq");
                
                //JSONArray是根据索引获取不同类型的数据
                jsonArray.get(0);
		jsonArray.getInteger(1);
		jsonArray.getBooleanValue(2);

上面的案例是JSONObject获取整型、字符串、布尔型的数值,JSONArray也有如此类似方法,不再举例子,除此之外,还有getBigDecimal,getBigInteger,getByte,getDouble,getJSONArray和getObject等方法,getObject方法可以将JSON转换为对应的实体类。JSONObject,JSONArray有如此多的get方法,我们就需要关注如果JSONuObject的key不存在或者JSONArray的索引不存在时是怎么处理的,默认值是多少。如下列表为key不存在时的默认值。

fast-json JSONObject value默认值
method value
get(Object key) null
getBooleanValue(String key) false
getBoolean(String key) null
getIntValue(String key) 0
getByteValue(String key) 0
getShortValue(String key) 0
getByte(String key) null
getBigInteger(String key) null
getInteger(String key) null
getDoubleValue(String key) 0.0
getFloatValue(String key) 0.0

上面列举了一部分JSONObject的默认值,总结起来就是非基本类型的数据(包括包装类)默认值为null,基本类型的数据布尔型默认为false,整型默认为0,浮点型默认为0.0。如果获取时,类型转换失败,则抛出异常。比如:

Exception in thread "main" java.lang.NumberFormatException: For input string: "pharos"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at com.alibaba.fastjson.util.TypeUtils.castToInt(TypeUtils.java:817)
    at com.alibaba.fastjson.JSONObject.getIntValue(JSONObject.java:243)
    at cn.org.microservice.fastjson.starter.FastJsonStarter.main(FastJsonStarter.java:59)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章