您的位置:首页 > Web前端 > JavaScript

FastJSON学习与简单实践

2016-11-07 22:40 204 查看

JSON类

FastJson类中提供了很多方法,但是我们只要学习其中几个核心的方法就行了。那么哪几个方法是核心方法呢,我们用JSON类的目的是什么呢,无非就是将一个json形式的字符串转化为一个java中的json对象或者json数组。或者是将一个java中json对象转化为json字符串。

- Static Object: parse(String text)

这是JSON类的一个static方法,我们通过JSON的api可以看出,它其中几乎所有的方法都是static的,这就方便我们直接使用JSON类来调用这些方法。而不用去创建JSON实例了。这个对象时说返回一个Object对象,但是我输入一个json字符串后,通过其解析返回的是JSONObject对象,这点不知是如何理解的,存在歧义。

因此,为了避免这种歧义,我们可以用下面的两种解析json字符串的方法。

- static JSONObject:parseObject(String text)

这个方法明确是说将一个string字符串解析为一个JSONObject对象。

//JSON
String str = "{'name':'kobe','age':23}";
String str1 = "";
Object object = JSON.parseObject(str);
str = JSON.toJSONString(object);


static JSONArray: parseArray(String text)

这个方法是明确的说将一个字符串解析为一个JSON数组的形式,在这个数组中的每个元素都是JSONObject类型的。

String jsonStr = "[{fieldName:'sex',fieldType:'radio',fieldValue:['man','women']}]";
JSONArray jsonArray = JSONArray.parseArray(jsonStr);
JSONObject jsonObject = jsonArray.getJSONObject(0);


JSONObject

构造方法:

JSONObject共有四个构造方法,其中有一个构造方法值得我们关注:

JSONObject(Map

//JSONObject
Map<String,Object> map = new HashMap();
map.put("name","kobe");
map.put("age",38);
map.put("points","25.5");
map.put("birth",new Date());
JSONObject jsonObj = new JSONObject(map);


除了上面所说的用构造方法实例化JSONObject对象外,我们要知道JSONObject是继承与JSON类的,因此我们同样可以通过使用JSON类中的方法来解析字符串得到JSONObject类。

method

既然已经得到了JSONObject对象了,那我们就得从这个对象中获得一些键的值了。这些键的值得获取方式都是通过get+类型获得的。

get(Object key)

这可以说是相当于所有get方法的一个总的方法,即其他所有get+类型的方法都可以用此方法来代替。因为该方法得到的是一个Object对象,如果你想获得想要的类型的对象,只需要强制转换一下就行。

String wife = (String)jsonObj.get("wife");


getDate(String key)

用该方法可以得到一个Date对象。

Date date = jsonObj.getDate("birth");


getDouble(String key)

获得一个Double型的对象。

getDoubleValue(String key)

该方法得到的是一个double的基本类型的变量值。

类似上面两组的方法还有getByte/getByteValue,getFloat/getFloatValue,getInteger/getIntValue。

getJSONObject(String key)

通过key得到一个JSONObject对象,也就是相当于json的嵌套写法。或者是java中put是value是一个JSONObject对象

getJSONArray(String key)

同上。

put(String key, Object value)

为JSONObject对象添加一组键值对。

remove(String key)

从JSONObject中移除一组键值对。

后来,我又看了一下JSONObject的源码,有种恍然大悟的感觉。原来这里所有的get、remove、put操作都是转化为一个对map的操作。那么这个map是哪里来的呢,还记JSONObject的构造函数嘛!对!就是那个map,几乎所有的操作都是和map息息相关的,因此,从某种意义上来说,我们可以吧JSONObject对象当做一个Map对象来看待。

下面是JSONObject中的部分源码:

private final Map<String, Object> map;

public JSONObject(){
this(16, false);
}

public JSONObject(Map<String, Object> map){
this.map = map;
}
public int size() {
return map.size();
}

public boolean isEmpty() {
return map.isEmpty();
}
public Object get(Object key) {
return map.get(key);
}
public JSONObject getJSONObject(String key) {
Object value = map.get(key);

if (value instanceof JSONObject) {
return (JSONObject) value;
}

return (JSONObject) toJSON(value);
}
public Boolean getBoolean(String key) {
Object value = get(key);

if (value == null) {
return null;
}

return castToBoolean(value);
}


JSONArray

构造函数

JSONArray(List list)

当你在看到这个构造函数的时候,会不会想到什么东西呢。或者说你已经明白了JSONArray是怎么回事了,对的!你没有猜错,它和JSONObject类似,它的核心就是对list对象的操作。因此,我就列出它常用的方法,大部分都不需要解释了,因为可以看成是操作list。

- add(int index, Object element)

- add(Object e)

- contains(Object o)

- get(int index)

- getBoolean(int index)

- getBooleanValue(int index)

- getDate()

- getString()

- isEmpty()

- interator()

- remove(int index)

- size()

以上的这些方法基本上都是list中的方法,其中get这些方法是说取index上具体类型的对象。

下面着重讲这几个方法:

- getJSONObject/getJSONArray

其实这两个方法也不特殊,和上面的get类似,只不过这里放在list中的元素是一个JSONObject/JSONArray对象而已。

- toArray()

将一个JSONArray转化为一个Object[]数组。

- toArray(T[] a)

将一个JSONArray转化为一个T[]型的a数组,这里T表示泛型。也就是在上一个方法的基础上,具体指定了转化后的数组类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息