Fastjson、json-smart、android系统自带json效率测试疑惑?

发布于 2021-11-27 19:55:27 字数 10248 浏览 527 评论 16

    我在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(16

倚栏听风 2021-11-28 07:43:32

论解析,smart最快,其次是系统自带,fastjson是序列化和反序列化快,不是解析快

路还长,别太狂 2021-11-28 07:43:32

引用来自“王学超”的评论

论解析,smart最快,其次是系统自带,fastjson是序列化和反序列化快,不是解析快

柳若烟 2021-11-28 07:43:32

想问一下,楼主有没有比较过json-smart, msgpack和protobuf的优劣呢

墨洒年华 2021-11-28 07:43:32

没有

泪冰清 2021-11-28 07:43:30

你的button3调用的也不是fastjson吗。。。无语了

夜司空 2021-11-28 07:43:27

你的button3调用的也不是fastjson吗。。。无语了

狼亦尘 2021-11-28 07:43:22

好吧,上面代码里面有!晕死

三月梨花 2021-11-28 07:43:22

次奥,你怎么知道?

裸钻 2021-11-28 07:43:15

玉兰香苑3期

草莓味的萝莉 2021-11-28 07:41:25

好吧,我再整理出个Java版本,一定要搞清楚怎么回事!

檐上三寸雪 2021-11-28 07:38:18

这个代码我看不懂啊

水水月牙 2021-11-28 07:36:49

就是因为这个我才产生了疑问啊!

冷默言语 2021-11-28 07:36:17

fastJson比系统自带的还要慢?

小瓶盖 2021-11-28 06:16:29

好吧  看到这些代码头就疼了。。。。。。

鹤舞 2021-11-28 03:55:21

看到就给跪了

为你鎻心 2021-11-28 03:39:08

好吧  看到这些代码头就疼了。。。。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文