`
huangyongxing310
  • 浏览: 491913 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

json序列化工具性能对比

阅读更多
json序列化工具性能对比


fastjson
1.fastjson是阿里做的国有开源Java工具包
2.FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。

jackson
1.Jackson是一个数据处理的工具套件,它的亮点是流式的JSON解析器及生成器。它是专为Java设计的,同时也能处理其它非JSON的编码。
2.从我们在Github中的统计来看,它应该是最流行的JSON解析器。
3.Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。
4.Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式

JSON.simple
JSON.simple是一个JSON编解码的Java工具库。它旨在打造一个轻量简单且高性能的工具库。

GSON
1.Google的GSON
2.GSON这个Java库能够在Java对象和JSON间进行相互转换。
3.Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。

JSONP
1.Oracle的JSONP
2.JSONP (JSON Processing)是JSON处理的一套Java API,从名字来看它就是用来生成及解析JSON串的。这是JSR353规范的一个开源实现。


总结
1.如果你的应用经常会处理大的JSON文件(190MB),那么Jackson应该是你的菜。GSON在大文件上表现得相当吃力。
2.如果你主要是处理小文件(1K)请求,比如某个微服务或者分布式架构的初始化,那么GSON当是首选。Jackson在小文件上的表现则不如人意。
3.如果这两种文件你都经常会处理到,那么在两轮表现中都位居第二的JSON.simple对此类场景则更为适合。在不同的文件大小上Jackson和GSON的表现都不太好。
4.如果只是功能要求,没有性能要求,可以使用google的Gson
5.如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean
6.GSON如果不是每次产生新对象时,是最快的

结论:
1.在做了初始化的情况下GSON的速度都是最快的。
2.在使用GSON或jackJson做Json处理时最好有个全局的解析对象,不要每次调用的时候都去生成那样对性能的影响很大,另外经过测试,这里面没有线程安全问题。
3.fastJson在json转化为对象的应用场景下性能比较突出


实测对比:
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.1</version>
</dependency>
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.6.2</version>
</dependency>
<dependency>
	<groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-core-asl</artifactId>
	<version>1.9.13</version>
</dependency>

                       
                       
package com.cesmart;

import java.util.List;

class Demo {
	private String cmd;
	private String content;
	private List<User> userList;

	public static class User{
		private int age;
		private String name;
		private int year;
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getYear() {
			return year;
		}
		public void setYear(int year) {
			this.year = year;
		}
	
	}

	public String getCmd() {
		return cmd;
	}

	public void setCmd(String cmd) {
		this.cmd = cmd;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public List<User> getUserList() {
		return userList;
	}

	public void setUserList(List<User> userList) {
		this.userList = userList;
	}

}


每次新建对象:
package com.cesmart;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cesmart.Demo.User;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;

public class Application {
	private static long count = 100;

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		long gsonTime = gson();
		System.gc();
		long jackJsonTime = jackJson();
		System.gc();
		long fastJsonTime = fastJson();
		System.gc();
		System.out.println("---------------------------------------------------------------");
		long gsonTime2 = gsonJson();
		System.gc();
		long jackJsonTime2 = jackJsonJson();
		System.gc();
		long fastJsonTime2 = fastJsonJson();

		System.out.println("---------------------------------------------------------------");
		System.out.println("object to json: " + "gsonTime       == " + gsonTime);
		System.out.println("object to json: " + "jackJsonTime   == " + jackJsonTime);
		System.out.println("object to json: " + "fastJsonTime   == " + fastJsonTime);
		System.out.println("---------------------------------------------------------------");
		System.out.println("json to object: " + "gsonTime       == " + gsonTime2);
		System.out.println("json to object: " + "jackJsonTime   == " + jackJsonTime2);
		System.out.println("json to object: " + "fastJsonTime   == " + fastJsonTime2);
	}

	private static Demo getDemo(int i) {
		Demo demo = new Demo();

		List<User> userList = new ArrayList<User>();

		User user1 = new User();
		user1.setAge(i);
		user1.setName("name");
		user1.setYear(i);

		User user2 = new User();
		user2.setAge(i + 2);
		user2.setName("name");
		user2.setYear(i + 2);

		User user3 = new User();
		user3.setAge(i + 3);
		user3.setName("name");
		user3.setYear(i + 3);

		userList.add(user1);
		userList.add(user2);
		userList.add(user3);

		demo.setCmd("1");
		demo.setContent("dd");
		demo.setUserList(userList);

		return demo;
	}

	private static long gson() {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			Gson gson = new Gson();
			String StringJson = gson.toJson(demo);
			System.out.println(StringJson);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("gson--obj--json:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long jackJson() throws Exception {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			ObjectMapper objectMapper = new ObjectMapper();
			String StringJson = objectMapper.writeValueAsString(demo);
			System.out.println(StringJson);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("jackJson--obj--json:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long fastJson() {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			// JSONObject jsonObject = new JSONObject();
			String StringJson = JSON.toJSONString(demo);
			System.out.println(StringJson);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("fastJson--obj--json:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long gsonJson() {
		long endTime1 = System.currentTimeMillis();

		for (int i = 0; i < count; i++) {
			Gson gson = new Gson();
			Demo demo = getDemo(i);
			String StringJson = JSON.toJSONString(demo);

			gson.fromJson(StringJson, Demo.class);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("gson--json--obj:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long jackJsonJson() throws Exception {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			ObjectMapper objectMapper = new ObjectMapper();
			Demo demo = getDemo(i);
			String StringJson = JSON.toJSONString(demo);

			objectMapper.readValue(StringJson, Demo.class);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("jackJson--json--obj:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long fastJsonJson() {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			String StringJson = JSON.toJSONString(demo);

			JSON.parseObject(StringJson, Demo.class);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("fastJson--json--obj:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

}


输出结果:


初始化时新建对象:
package com.cesmart;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cesmart.Demo.User;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;

public class Application2 {
	private static ObjectMapper objectMapper = new ObjectMapper();

	private static Gson gson = new Gson();

	private static JSONObject jsonObject = new JSONObject();

	private static long count = 100;

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		long gsonTime = gson();
		System.gc();
		long jackJsonTime = jackJson();
		System.gc();
		long fastJsonTime = fastJson();
		System.gc();
		System.out.println("---------------------------------------------------------------");
		long gsonTime2 = gsonJson();
		System.gc();
		long jackJsonTime2 = jackJsonJson();
		System.gc();
		long fastJsonTime2 = fastJsonJson();

		System.out.println("---------------------------------------------------------------");
		System.out.println("object to json: " + "gsonTime       == " + gsonTime);
		System.out.println("object to json: " + "jackJsonTime   == " + jackJsonTime);
		System.out.println("object to json: " + "fastJsonTime   == " + fastJsonTime);
		System.out.println("---------------------------------------------------------------");
		System.out.println("json to object: " + "gsonTime       == " + gsonTime2);
		System.out.println("json to object: " + "jackJsonTime   == " + jackJsonTime2);
		System.out.println("json to object: " + "fastJsonTime   == " + fastJsonTime2);

	}

	private static Demo getDemo(int i) {
		Demo demo = new Demo();

		List<User> userList = new ArrayList<User>();

		User user1 = new User();
		user1.setAge(i);
		user1.setName("name");
		user1.setYear(i);

		User user2 = new User();
		user2.setAge(i + 2);
		user2.setName("name");
		user2.setYear(i + 2);

		User user3 = new User();
		user3.setAge(i + 3);
		user3.setName("name");
		user3.setYear(i + 3);

		userList.add(user1);
		userList.add(user2);
		userList.add(user3);

		demo.setCmd("1");
		demo.setContent("dd");
		demo.setUserList(userList);

		return demo;
	}

	private static long gson() {
		long endTime1 = System.currentTimeMillis();

		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);

			String StringJson = gson.toJson(demo);
			System.out.println(StringJson);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("gson--obj--json:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long jackJson() throws Exception {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);

			String StringJson = objectMapper.writeValueAsString(demo);
			System.out.println(StringJson);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("jackJson--obj--json:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long fastJson() {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			String StringJson = JSON.toJSONString(demo);
			System.out.println(StringJson);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("fastJson--obj--json:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long gsonJson() {
		long endTime1 = System.currentTimeMillis();

		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			String StringJson = JSON.toJSONString(demo);

			gson.fromJson(StringJson, Demo.class);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("gson--json--obj:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long jackJsonJson() throws Exception {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			String StringJson = JSON.toJSONString(demo);

			objectMapper.readValue(StringJson, Demo.class);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("jackJson--json--obj:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

	private static long fastJsonJson() {
		long endTime1 = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			Demo demo = getDemo(i);
			String StringJson = JSON.toJSONString(demo);

			JSON.parseObject(StringJson, Demo.class);
		}
		long endTime2 = System.currentTimeMillis();
		System.out.println("fastJson--json--obj:" + (count * 1000) / (endTime2 - endTime1) + "次/s" + " use time == "
				+ (endTime2 - endTime1) + "ms");
		return endTime2 - endTime1;
	}

}

输出结果:



参考原文:http://blog.csdn.net/accountwcx/article/details/50252657
参考原文:http://www.open-open.com/lib/view/open1434377191317.html
参考原文:http://www.oschina.net/code/snippet_1156226_26432
参考原文:http://chenyanxi.blog.51cto.com/4599355/1543445
参考原文(GSON最快的实现):http://chenyanxi.blog.51cto.com/4599355/1543445
  • 大小: 26.3 KB
  • 大小: 26 KB
分享到:
评论

相关推荐

    cpp-metajson非侵入性高性能的C17轻量级JSON序列化工具

    cpp-metajson是一款专为C++17设计的轻量级JSON序列化工具,其核心特性在于非侵入性和高性能。非侵入性意味着该库不会要求你修改原有的数据结构来适应JSON序列化的需求,而是通过元编程技术自动处理数据到JSON的转换...

    JSON序列化工具探析.pdf

    本文研究比较了当前比较流行的四款Java的JSON类库的性能,以期为开发者在选择JSON序列化工具时提供依据。 二、基于Java的JSON类库 2.1 Gson Gson是Google公司下的一个开源项目,它能够将Java对象转换为JSON对象...

    Java Json序列化与反序列化

    总结,Java中的JSON序列化与反序列化是数据交互的重要环节,Jackson和Gson是两个常用的库,它们提供了丰富的功能和良好的API设计,使得处理JSON数据变得简单高效。通过理解和掌握这些知识,开发者可以更好地在Java...

    Json序列化和反序列化

    在C#和ASP.NET开发中,JSON序列化和反序列化是常见的操作,用于将对象转换为JSON字符串以便在网络间传输,或者将接收到的JSON字符串恢复为对象。 **一、JSON序列化** 序列化是指将对象转换为可存储或传输的形式,...

    Json格式序列化和反序列化处理

    在C#中,处理JSON格式的序列化和反序列化是开发过程中的常见任务,这涉及到将C#对象转换为JSON字符串,以及将JSON字符串还原为C#对象。本文将详细介绍C#中几种常用的JSON处理方法。 一、Newtonsoft.Json库(Json...

    c# 使用Json.NET实现json序列化.docx

    C#中JSON序列化和反序列化是.NET开发者在处理数据交换时常见的任务,特别是在Web服务、API接口或者数据存储中。Json.NET是一个广泛使用的第三方库,由James Newton-King开发,它提供了高效的JSON操作,并且在.NET...

    序列化工具(Gson, Jackson, FastJson, ProtoBuf)

    在这个主题中,我们将深入探讨四种常用的序列化工具:Gson, Jackson, FastJson和ProtoBuf,以及与ProtoBuf相关的`proto.exe`工具。 1. Gson(Google Gson): Gson是由Google提供的Java库,用于将Java对象转换为...

    Python-srsly用于Python的现代高性能序列化工具

    Python-srsly是一个针对Python开发的现代高性能序列化库,其设计目的是为了提供高效的数据序列化和反序列化功能,特别是在处理JSON、MessagePack和BSON等格式时表现优秀。这个库是为了解决标准库如json和pickle在...

    protobuf 序列化工具类

    综上所述,protobuf是一种强大的数据序列化工具,通过.proto文件定义数据结构,利用protoc编译器生成各语言代码,提供高效、小巧的序列化与反序列化功能,广泛应用于各种软件工程中。掌握protobuf能够提升软件的性能...

    java中Json工具的用法与性能测试

    关于性能测试,通常我们会创建大量数据并比较这些库在序列化和反序列化上的速度。性能测试可能涉及CPU时间、内存使用以及处理大量数据时的稳定性和可扩展性。然而,具体测试结果会因硬件、软件环境和数据结构的不同...

    json操作常用工具类

    这个"json操作常用工具类"的压缩包很可能是包含了一些常用的Java JSON处理工具,帮助开发者更便捷地进行JSON的解析、生成、序列化和反序列化。 1. **Jackson库** Jackson是Java中最流行的JSON处理库之一,它提供了...

    适用于Unity WebGL的JsonNet,普通的JsonNet是不能运行在webgl上的

    JsonNet是一个流行的JSON序列化和反序列化库,通常用于.NET Framework和.NET Core项目,但它不直接支持Unity WebGL。 在Unity WebGL中使用JsonNet,我们需要了解以下关键知识点: 1. **Unity WebGL的限制**:Unity...

    protobuf/thrift/avro-序列化性能测试工程

    这个名为"protobuf/thrift/avro-序列化性能测试工程"的项目专注于对比这三种技术的性能。 protobuf是Google开发的一种高效的数据序列化协议,它提供了简洁、快速和跨平台的序列化方法。protobuf通过定义.proto文件...

    JSON格式化的工具包

    例如,当从服务器获取未经格式化的JSON响应时,格式化工具能使其更易于理解。 2. **解析**:将JSON文本转换为编程语言中的数据结构,如JavaScript的对象或Python的字典。这使得我们可以轻松地访问和操作JSON数据。 ...

    java中3个json工具分析测试

    Jackson以其高性能和强大的功能著称,它提供了流式API、树模型API以及对象映射API(即Jackson的标志性特性——`@Json`注解),使得JSON序列化和反序列化非常方便。此外,Jackson还支持JSON Schema和JSON-P,对于复杂...

    json 解析 工具

    - `DataContractJsonSerializer`:它是.NET Framework的通用JSON序列化器,可以将.NET对象转换为JSON字符串,或将JSON字符串反序列化为.NET对象。在Windows Phone 7开发中,这个类通常用于服务器数据交换。 4. ...

    swift-JSONShootout几款主流SwiftJSON映射器使用及性能对比测试

    Swift标准库中的`JSONSerialization`是基础的JSON解析和序列化工具。它提供了`data`到`JSON`以及`JSON`到`data`的转换。虽然简单易用,但它的性能可能不如专门的JSON库高效。 2. **SwiftyJSON** SwiftyJSON是...

    Python调用序列化数据工具Protocol Buffers——protobuf

    总结,Protocol Buffers是Python及其他编程语言中实现高效数据序列化的重要工具,尤其在跨语言通信和高性能应用中,protobuf的优势更为突出。通过学习和掌握protobuf,开发者可以提高数据处理效率,简化系统间的数据...

    Python-PyJSON5用Cython编写的Python3JSON5序列化程序和解析器库

    PyJSON5是一款专为Python 3设计的JSON5序列化和解析库,它利用了Cython技术来提高性能。JSON5是一种扩展JSON的格式,旨在解决原始JSON的一些限制,使得JSON更加友好,更便于人类阅读和编写,同时也保留了与JSON的...

    消息序列化/反序列化的基准和用法

    消息序列化与反序列化是IT领域中一个关键的概念,...正确选择和使用序列化工具不仅可以提升系统的性能,还能增强系统的互操作性和可维护性。对这个主题深入理解并持续关注新技术的发展,对于IT专业人士来说非常重要。

Global site tag (gtag.js) - Google Analytics