场景描写叙述:

本文仅验证了在安卓环境下使用Json的Key作为反序列化条件的解析速度。结论是解析速度最快的不是阿里的fastjson,也不是Google的Gson,而是json-smart。

Android 4.4.2

fastjson-1.1.34.android.jar

gson-2.2.4.jar

json-smart-2.0-RC3.jar

**注意场景的限定条件**

核心代码:

package com.h3c.mytestview;

import java.io.StringReader;

import net.minidev.json.JSONValue;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader; public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Thread(new Runnable() {
@Override
public void run() {
doSth();
}
}).start();
} private void doSth() {
Log.e("H6c","start...");
String json = "{\"name\":\"reiz\"}";
String k = "";
try {
long startTime1 = System.currentTimeMillis();
for(int n = 0;n < 100000; n++) {
org.json.JSONObject jo;
jo = new org.json.JSONObject(json);
k = jo.getString("name");
}
long endTime1 = System.currentTimeMillis() - startTime1;
Log.e("H6c","android:"+ endTime1); long startTime2 = System.currentTimeMillis();
for(int n = 0;n < 100000; n++) {
JSONObject jo = JSON.parseObject(json);
k = jo.getString("name");
}
long endTime2 = System.currentTimeMillis() - startTime2;
Log.e("H6c","fastjson:"+ endTime2); long startTime3 = System.currentTimeMillis();
for(int n = 0;n < 100000; n++) {
net.minidev.json.JSONObject jo = (net.minidev.json.JSONObject)JSONValue.parseStrict(json);
k = (String)jo.get("name");
}
long endTime3 = System.currentTimeMillis() - startTime3;
Log.e("H6c","json-smart:"+endTime3); long startTime4 = System.currentTimeMillis();
for(int n = 0;n < 100000; n++) {
JsonElement je = new JsonParser().parse(json);
JsonObject jo = je.getAsJsonObject();
k = jo.get("name").getAsString();
}
long endTime4 = System.currentTimeMillis() - startTime4;
Log.e("H6c","gson:"+endTime4);
} catch (Exception e) {
e.printStackTrace();
}
}
}

測试结果:

Galaxy S3

===========Galaxy S3=============1
05-22 11:04:17.120: E/H6c(28681): start...
05-22 11:04:21.525: E/H6c(28681): android:4400
05-22 11:04:28.135: E/H6c(28681): fastjson:6608
05-22 11:04:31.600: E/H6c(28681): json-smart:3467
05-22 11:04:47.440: E/H6c(28681): gson:15839
===========Galaxy S3=============2
05-22 11:05:08.230: E/H6c(28681): start...
05-22 11:05:12.120: E/H6c(28681): android:3886
05-22 11:05:17.285: E/H6c(28681): fastjson:5167
05-22 11:05:21.020: E/H6c(28681): json-smart:3736
05-22 11:05:34.040: E/H6c(28681): gson:13018
===========Galaxy S3=============3
05-22 11:05:45.440: E/H6c(28681): start...
05-22 11:05:49.470: E/H6c(28681): android:4033
05-22 11:05:54.500: E/H6c(28681): fastjson:5031
05-22 11:05:58.240: E/H6c(28681): json-smart:3736
05-22 11:06:13.485: E/H6c(28681): gson:15245

Galaxy S4

===========Galaxy S4=============1
05-22 10:58:03.541: E/H6c(26600): start...
05-22 10:58:06.934: E/H6c(26600): android:3393
05-22 10:58:12.680: E/H6c(26600): fastjson:5752
05-22 10:58:15.232: E/H6c(26600): json-smart:2549
05-22 10:58:24.841: E/H6c(26600): gson:9610 ===========Galaxy S4=============2
05-22 11:00:51.675: E/H6c(26600): start...
05-22 11:00:54.878: E/H6c(26600): android:3209
05-22 11:01:00.413: E/H6c(26600): fastjson:5526
05-22 11:01:02.986: E/H6c(26600): json-smart:2569
05-22 11:01:11.084: E/H6c(26600): gson:8099 ===========Galaxy S4=============3
05-22 11:01:31.213: E/H6c(26600): start...
05-22 11:01:34.717: E/H6c(26600): android:3508
05-22 11:01:40.172: E/H6c(26600): fastjson:5443
05-22 11:01:42.734: E/H6c(26600): json-smart:2566
05-22 11:01:52.554: E/H6c(26600): gson:9823

Xiaomi3

===========Xiaomi 3=============1
05-22 11:02:05.461: E/H6c(30473): start...
05-22 11:02:08.021: E/H6c(30473): android:2561
05-22 11:02:11.781: E/H6c(30473): fastjson:3766
05-22 11:02:13.411: E/H6c(30473): json-smart:1629
05-22 11:02:16.811: E/H6c(30473): gson:3402 ===========Xiaomi 3=============2
05-22 11:02:30.291: E/H6c(30473): start...
05-22 11:02:32.481: E/H6c(30473): android:2184
05-22 11:02:36.341: E/H6c(30473): fastjson:3856
05-22 11:02:37.781: E/H6c(30473): json-smart:1439
05-22 11:02:40.991: E/H6c(30473): gson:3210 ===========Xiaomi 3=============3
05-22 11:02:47.731: E/H6c(30473): start...
05-22 11:02:50.271: E/H6c(30473): android:2548
05-22 11:02:53.831: E/H6c(30473): fastjson:3553
05-22 11:02:55.261: E/H6c(30473): json-smart:1431
05-22 11:02:58.571: E/H6c(30473): gson:3310

从測试结果来看:

在使用key解析json的场景下,速度最快的是json-smart,其解析速度有所提升。

本文研究的结论是Android原生Java解析已经具备基础json解析能力,并且在速度上有一定的优势,在简单的场景下无需引用噱头比較大的fastjson和gson。并且在对速度没有极端追求的场景下也无需引入json-smart, 由于其可能只只帮你节省了后台1s的时间,感官上事实上察觉不明显。

Android解析Json速度最快的库:json-smart的更多相关文章

  1. php 函数strtr 替换函数实例解析 strtr 速度比较快

    先来看看这个php字符串替换函数 PHP字符串替换函数strtr()的两种状态 strtr(string,from,to) 或者strtr(string,array) 首先针对PHP字符串替换函数st ...

  2. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

  3. android解析json

    android2.3提供的json解析类 android的json解析部分都在包org.json下,主要有以下几个类: JSONObject:可以看作是一个json对象 JSONStringer:js ...

  4. Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)

    json和xml的普及个人觉得是为了简化阅读难度,以及减轻网络负荷,json和xml 数据格式在格式化以后都是一种树状结构,可以树藤摸瓜的得到你想要的任何果子. 而不格式化的时候json和xml 又是 ...

  5. 开源解析库 - JSON

    Json及其实现 JSON作为一种轻量级的数据交换格式,多被用于跨语言通信(比如CPP与PHP之间的数据交互). 至于何为JSON,其详细解释参考 官网. 既然是一种格式,那便必然有相应的编码实现.在 ...

  6. android 解析服务器数据使用json还是xml方式

    整理自百度搜索: 现在的Android应用程序,几乎没有不与服务端交换数据的了!那么,android应用在与服务端交换数据的时候,我们有哪些选择呢?哪种数据交换格式要更好吗?下面文章简单为 andro ...

  7. Android解析中国天气接口JSon数据,应用于天气查询!

    android解析Json数据是比较常见的一种操作.也是客户端和服务器进行数据交互的桥梁.下面就来看一看在android中解析JSon数据的方法吧. 首先要想获得Json数据,就必须访问相关的网络接口 ...

  8. [转]Android解析json数据

    1.json格式 2.json解析 3.gson解析 4.fastjson解析 一.Json格式 json一种轻量级的数据交换格式.在网络上传输交换数据一般用xml, json. 两种结构: 1)对象 ...

  9. Android解析Json数据之Gson解析

    Gson是谷歌官方提供的解析json数据的工具类.json数据的解析能够使用JSONObject和JSONArray配合使用解析数据,可是这样的原始的方法对于小数据的解析还是有作用的,可是陪到了复杂数 ...

随机推荐

  1. Java装饰设计模式的例子

    这里给出一个顾客购买咖啡的例子.其中咖啡可以加冰(2元),加巧克力(4元). 下面是面向对象中装饰模式的解决方案. /** * Created with IntelliJ IDEA. * User: ...

  2. c#中的delegate(委托)和event(事件)

    c#中的delegate(委托)和event(事件) 一.delegate是什么东西? 完全可以把delegate理解成C中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能 ...

  3. DHTMLX 前端框架 建立你的一个应用程序 教程(八)-- 添加表单Form

    添加表单Form 我们下一步是在页面中添加一个表单,表格中的选中字段将会显示在表单中.提供一个提交按钮 可以对显示的数据进行修改提交. 添加表单到布局单元格中 1.在右侧布局中使用attachForm ...

  4. ANDROID_MARS学习笔记_S01原始版_008_Handler(异步消息处理机制)

    一.流程 1.点击按钮,则代码会使handler把updateThread压到队列里去,从而执行updateThread的run() 2.run()里会通过msg.arg1 = i 和bundle来写 ...

  5. 如何查看跟踪查看LINUX内核中的源码

    我的博客:www.while0.com 最近看LINUX书籍时,根据书中代码找相应的函数或者结构定义相当吃力,根据网上资料按以下方法查找速度较快. 1.安装ctags 在源代码目录下运行 ctags ...

  6. 【HDOJ】3480 Division

    斜率dp+滚动数组. /* 3480 */ #include <iostream> #include <sstream> #include <string> #in ...

  7. Oracle Form 特殊的默认值 $$variables$$

    Oracle Forms 提供了六个特殊的系统变量,均为提供日期和时间的信息的变量: •$$DATE$$ •$$TIME$$ •$$DATETIME$$ •$$DBDATE$$ •$$DBTIME$$ ...

  8. Android开发UI之Navigation Drawer

    http://blog.csdn.net/xyz_lmn/article/details/12523895

  9. MapReduce 模式、算法和用例(MapReduce Patterns, Algorithms, and Use Cases)

    在新文章“MapReduce模式.算法和用例”中,Ilya Katsov提供了一个系统化的综述,阐述了能够应用MapReduce框架解决的问题. 文章开始描述了一个非常简单的.作为通用的并行计算框架的 ...

  10. ArrayList和LinkedList

    ArrayListArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变.这样就带来 ...