Fastjson、json-smart、android系统自带json效率测试疑惑?
我在Android系统下对如题提到的三种json解析器做了下效率测试,可是我觉得测试结果有点难以置信,就把测试代码贴出来,大伙给看看。
package com.example.traceviewdemo; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private String testString = null; private static final int TEST_COUNT = 10000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); jsonObject.put("name", "onetwothree"); jsonObject.put("year", "25"); jsonObject.put("address", "上海市浦东新区盛夏路1107弄58号"); jsonObject.put("father", "爸爸"); jsonObject.put("mother", "妈妈"); jsonObject.put("note", "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + "Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。" + ""); jsonObject.put("uri", "www.baidu.com/xiaolifan"); jsonObject.put("others", "没有了,好长啊!"); testString = jsonObject.toString(); findViewById(R.id.button1).setOnClickListener(clickListener); findViewById(R.id.button2).setOnClickListener(clickListener); findViewById(R.id.button3).setOnClickListener(clickListener); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private OnClickListener clickListener = new OnClickListener() { @Override public void onClick(View v) { if (v.getId() == R.id.button1) { //fastjson long startTime = System.currentTimeMillis(); for (int i = 0; i < TEST_COUNT; i++) { com.alibaba.fastjson.JSONObject testJsonObject = com.alibaba.fastjson.JSONObject.parseObject(testString); Log.i("test", "the name is " + testJsonObject.getString("name")); Log.i("test", "the year is " + testJsonObject.getString("year")); Log.i("test", "the address is " + testJsonObject.getString("address")); Log.i("test", "the father is " + testJsonObject.getString("father")); Log.i("test", "the mother is " + testJsonObject.getString("mother")); Log.i("test", "the note is " + testJsonObject.getString("note")); Log.i("test", "the uri is " + testJsonObject.getString("uri")); Log.i("test", "the others is " + testJsonObject.getString("others")); } long endtime = System.currentTimeMillis(); double time = ((endtime - startTime)*1.000000f) / TEST_COUNT; ((Button)v).setText(time + ""); } else if (v.getId() == R.id.button2) { //jsonsmart long startTime = System.currentTimeMillis(); for (int i = 0; i < TEST_COUNT; i++) { net.minidev.json.JSONObject testJsonObject = (net.minidev.json.JSONObject) net.minidev.json.JSONValue.parse(testString); Log.i("test", "the name is " + (String)testJsonObject.get("name")); Log.i("test", "the year is " + (String)testJsonObject.get("year")); Log.i("test", "the address is " + (String)testJsonObject.get("address")); Log.i("test", "the father is " + (String)testJsonObject.get("father")); Log.i("test", "the mother is " + (String)testJsonObject.get("mother")); Log.i("test", "the note is " + (String)testJsonObject.get("note")); Log.i("test", "the uri is " + (String)testJsonObject.get("uri")); Log.i("test", "the others is " + (String)testJsonObject.get("others")); } long endtime = System.currentTimeMillis(); double time = ((endtime - startTime)*1.000000f) / TEST_COUNT; ((Button)v).setText(time + ""); } else { long startTime = System.currentTimeMillis(); for (int i = 0; i < TEST_COUNT; i++) { com.alibaba.fastjson.JSONObject testJsonObject = com.alibaba.fastjson.JSONObject.parseObject(testString); Log.i("test", "the name is " + testJsonObject.getString("name")); Log.i("test", "the year is " + testJsonObject.getString("year")); Log.i("test", "the address is " + testJsonObject.getString("address")); Log.i("test", "the father is " + testJsonObject.getString("father")); Log.i("test", "the mother is " + testJsonObject.getString("mother")); Log.i("test", "the note is " + testJsonObject.getString("note")); Log.i("test", "the uri is " + testJsonObject.getString("uri")); Log.i("test", "the others is " + testJsonObject.getString("others")); } long endtime = System.currentTimeMillis(); double time = ((endtime - startTime) * 1.000000f) / TEST_COUNT; ((Button) v).setText(time + ""); } } }; }测试结果如下图:
从上到下依次为:fastjsonjson-smart系统自带解析器
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(16)
论解析,smart最快,其次是系统自带,fastjson是序列化和反序列化快,不是解析快
引用来自“王学超”的评论
论解析,smart最快,其次是系统自带,fastjson是序列化和反序列化快,不是解析快
想问一下,楼主有没有比较过json-smart, msgpack和protobuf的优劣呢
没有
你的button3调用的也不是fastjson吗。。。无语了
你的button3调用的也不是fastjson吗。。。无语了
好吧,上面代码里面有!晕死
次奥,你怎么知道?
玉兰香苑3期
好吧,我再整理出个Java版本,一定要搞清楚怎么回事!
这个代码我看不懂啊
就是因为这个我才产生了疑问啊!
fastJson比系统自带的还要慢?
好吧 看到这些代码头就疼了。。。。。。
看到就给跪了
好吧 看到这些代码头就疼了。。。。。。