????????在現(xiàn)代的整個互聯(lián)網(wǎng)的交互通信中,json表達(dá)的簡潔性和文本化的特性給我們帶來很大的操作便捷性俭令。所以大量的通信都使用這種表達(dá)方式后德。
????????但是對于json方式,大家有比較多的解析方式抄腔,其中阿里開源的fastjson相信是我們大家使用最多的一種瓢湃。但是我們現(xiàn)在有一種更好的解析方式----jsoncode理张,maven包引用是這樣的:
<dependency>
<groupId>cn.miludeer</groupId>
<artifactId>jsoncode</artifactId>
<version>1.2.4</version>
</dependency>
下面我們做個實驗,比較jsoncode和fastjson兩者之前的區(qū)別绵患。比如我們解析下面這段json結(jié)構(gòu):
{
"json": {
"a": {
"www": "ff",
"rrr": ["v1", "v2"]
},
"b": {
"www": "4567ttt",
"rrr": ["v1", "v2"]
}
}
}
我們想要獲取【json】下的【b】下的【www】的值“4567ttt”雾叭,測試代碼如下:
public class Jsontest {
private static String json = "{\"json\":{\"a\":{\"www\":\"ff\",\"rrr\":[\"v1\",\"v2\"]},\"b\":{\"www\":\"4567ttt\",\"rrr\":[\"v1\",\"v2\"]}}}";
public static String usefastjson() { // 使用fastjson
JSONObject ob = JSON.parseObject(json).getJSONObject("json").getJSONObject("b");
return ob.getString("www");
}
public static String usejsoncode() { // 使用jsoncode
String ret = JsonCode.getValue(json, "$.json.b.www");
return ret;
}
public static void main(String[] argv) {
long time1 = System.currentTimeMillis();
for(int i=0; i<10000000;i++) {
usejsoncode();
}
long time2 = System.currentTimeMillis();
for(int i=0; i<10000000;i++) {
usefastjson();
}
long time3 = System.currentTimeMillis();
System.out.println("fastJson:" + (time3 - time2));
System.out.println("jsoncode:" + (time2 - time1));
}
}
執(zhí)行之后結(jié)果如下:
fastJson:10772
jsoncode:6457
從運(yùn)行10000000次,消耗時間的結(jié)果上可見:目前的測試條件下落蝙,確實是fastjson稍微劣勢织狐。這么差,我們還要用它么筏勒?
我們下面轉(zhuǎn)入正題移迫,這里先不說fastjson的在處理上的性能,更何況這里的測試也不是很全面管行。這里主要說的是使用jsoncode在編程操作的便捷上優(yōu)化厨埋。
我們仔細(xì)研究下兩者的處理方式。
fastjson的方式:
String value = JSON.parseObject(json).getJSONObject("json").getJSONObject("b").getString("www");
jsoncode的方式:
String value = JsonCode.getValue(json, "$.json.b.www");
明顯看到兩者的取數(shù)據(jù)上的區(qū)別捐顷,jsoncode的取用的方式更加的直接和便捷荡陷,直接使用“$.json.b.www”這樣的取數(shù)路徑,就能取出這個結(jié)構(gòu)下的對應(yīng)值套菜。這種方式更適合我們在配置文件中配置出來所需要取的數(shù)據(jù)的對應(yīng)的取數(shù)路徑亲善,統(tǒng)一化處理邏輯。取數(shù)據(jù)的語意上也比較明確和完整逗柴,方便描述蛹头。
建議:如果json中的幾乎所有字典都要用到,直接使用fastjson的解析就很方便了戏溺。如果僅使用某一個或幾個字段渣蜗,或是包括一些基本的運(yùn)算,那jsoncode的優(yōu)勢就完全體現(xiàn)出來啦旷祸!
此外耕拷,jsoncode中還支持一些表達(dá)式功能(包括一些函數(shù)),歡迎大家訪問:https://github.com/lujinfeifly/jsoncode