`
Deo
  • 浏览: 32074 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSON BSON 效率比较

    博客分类:
  • Java
阅读更多

对于基础知识的学习和理解,请参看两者的官方网站:

JSON: http://www.json.org/

BSON: http://bsonspec.org/

 

这里主要介绍两者对于POJO的转换方式以及效率比对。

选择 Jackson JSON Processor 和 bson4jackson 来作为转换器,是因为这两款产品在开发中用的最多。

 

1. JSON

Jackson提供三种方法处理JSON:

  • Streaming API :reads and writes JSON content as discrete events. 该方式效率最高(相比于其他两种方式)

  • Tree Model:provides a mutable in-memory tree representation of a JSON document,该方式最灵活

  • Data Binding:couverts JSON to and from POJOs based either on property accessor conventions or annotations. 这种方式通常是最方便的。

先提供一个实体类 -- User entity (User.java 代码参看附件),JSON表示如下:

{
  "name" : { "first" : "Joe", "last" : "Sixpack" },
  "gender" : "MALE",
  "verified" : false,
  "userImage" : "Rm9vYmFyIQ=="
}

 JSON 和 POJO的转换程序如下:

 

public class JsonPojoMapper {
	private static ObjectMapper m = new ObjectMapper();
	private static JsonFactory jf = new JsonFactory();

	public static <T> Object fromJson(String jsonAsString, Class<T> pojoClass) throws Exception {
		return m.readValue(jsonAsString, pojoClass);
	}

	public static String toJson(Object pojo, boolean prettyPrint)
			throws IOException {
		StringWriter sw = new StringWriter();
		JsonGenerator jg = jf.createGenerator(sw);
		if (prettyPrint) {
			jg.useDefaultPrettyPrinter();
		}
		m.writeValue(jg, pojo);
		return sw.toString();
	}
}

 

 

2. BSON

BSON short for Binary JSON, is a binary-encoded serialization of JSON-like documents.

BSON目前主要用于MongoDB中,是MongoDB的数据存储格式。

BSON文档到字符文档的转换类似于JSON,具体可参考下面的测试代码

 

3. performance测试

更高的效率是BSON的主要目标之一,但究竟和JSON比效率如何?

测试场景:100W条数据的转换,从POJO转换为JSON/BSON, 然后再转换为POJO

测试代码:

 

public class PerformanceBsonJson {
	private User src = new User();
	private User dst = new User();

	@Before
	public void setUP() {
		src.setUserName("ca bj test");
		src.setPassword("ca admin");
	}

	@Test
	public void testJson() throws Exception {
		long begin = System.currentTimeMillis();
		for (int i = 0; i < 1000000; i++) {
			String jsonString = JsonPojoMapper.toJson(src, true);
			dst = (User) JsonPojoMapper.fromJson(jsonString, User.class);
		}
		long end = System.currentTimeMillis();
		System.out.println("Transfer Json cost is: " + (end - begin) + "ms");
	}
	
	@Test
	public void testBson() throws JsonProcessingException, JsonMappingException, IOException {
		BsonFactory fac = new BsonFactory();
		fac.enable(BsonGenerator.Feature.ENABLE_STREAMING);
		ObjectMapper mapper = new ObjectMapper(fac);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		long begin = System.currentTimeMillis();
		for(int i=0; i<1000000; i++){
			mapper.writeValue(baos, src);
			ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
			dst = mapper.readValue(bais, User.class);
			baos.reset();
		}
		long end = System.currentTimeMillis();
		System.out.println("Transfer Bson cost is: " + (end-begin) +"ms");
	}
}

 

 

测试结果:

        Transfer Bson cost is: 4939ms

        Transfer Json cost is: 2339ms

PS:测试结果根据选用第三方转换类库,以及转换方式不同会有不同结果。

但这种场景至少说明,在某些情况下JSON比BSON效率更高。

 

详细可执行代码参考附件内容。

分享到:
评论
1 楼 yinnanyi 2017-01-20  
我觉得这个比较的结果是可以预期的,bson结构比json要复杂一些,要计算各个字段的长度,肯定会影响转换的速度。

相关推荐

    bson_json.zip

    在Golang中,BSON(Binary JSON)和JSON(JavaScript Object Notation)是两种常见的数据序列化格式。BSON提供了一种二进制形式的数据表示,适合于高性能的网络通信和数据库存储,而JSON则是一种轻量级的人可读文本...

    json-to-bson-go:帮助开发人员生成Go BSON类映射的模块

    总结来说,`json-to-bson-go`是一个针对Golang开发者的实用工具,能够根据JSON数据自动生成BSON映射的Go结构体,从而简化数据序列化和反序列化的操作,提高开发效率并降低错误率。通过利用这个模块,开发者可以更加...

    BSON Console 例子

    在IT领域,BSON(Binary JSON)是一种用于在网络间高效传输JSON数据的二进制格式。它与JSON(JavaScript Object Notation)类似,但增加了二进制编码,使得数据在网络传输时能以更小的体积和更快的速度进行。本示例...

    android-bson

    BSON是一种二进制形式的数据表示方法,它在JSON基础上增加了对日期、二进制数据、大型整数等类型的支持,同时以更紧凑的格式存储数据,提高了序列化和反序列化的效率。 BSON协议在Android中的应用通常涉及以下几个...

    Node.js-JacksonJSON处理器的一个BSON生器和解析器

    它可以提高数据处理的效率,简化代码,使Android应用能够更流畅地与使用BSON的服务器进行通信。 总结来说,"Jackson JSON处理器的一个BSON生器和解析器"是Java开发者处理BSON数据的一种工具,通过它,可以充分利用...

    C++实现的BOSN bson-cpp的编译

    在IT行业中,BSON(Binary JSON)是一种数据序列化格式,它类似于JSON,但使用二进制表示形式,使得在存储和传输数据时更高效。BSON-cpp是C++实现的一个库,允许开发者在C++项目中方便地处理BSON数据。本篇文章将...

    mongodb BSON的基本使用教程

    BSON(Binary JSON)是MongoDB中用于存储数据的二进制格式,它结合了JSON的易读性和二进制数据的效率。本教程将详细介绍MongoDB中的BSON使用,以及如何通过Go语言的mgo驱动进行操作。 1. **BSON数据类型与结构体...

    C# Json格式的转换

    BSON是一种二进制表示JSON数据的方式,通常用于提高数据传输效率。在Json.NET中,你可以使用 `BsonDataDocument` 和 `BsonSerializer` 类进行BSON操作: ```csharp // 序列化对象到BSON字节数组 byte[] bsonBytes =...

    Python库 | bson-0.4.2.tar.gz

    BSON的设计目标是在保持JSON的易读性和灵活性的同时,提高在网络中的传输效率和存储效率。BSON库在Python中扮演的角色就是对这种数据格式进行编码和解码。 "Bson-0.4.2.tar.gz"是一个源代码压缩包,通常用于分发...

    前端项目-js-bson.zip

    BSON(Binary JSON)是一种数据格式,它扩展了JSON(JavaScript Object Notation)标准,允许存储二进制数据和其他类型的数据,如日期和对象ID,使其更适合于数据库存储和传输。 首先,我们需要理解BSON的重要性。...

    C++结构体和json/xml之间互相转换

    对于`bson`库,它提供了一种高效的方式来处理BSON(Binary JSON),这是一种二进制形式的JSON,适合在内存中快速操作。xbson是`bson`的一个C++封装,它提供了头文件接口,无需编译库文件,使得集成更加方便。在`...

    newtonsoft.json各个版本

    5. **Json.NET 支持多种数据格式**:除了标准的 JSON,还支持 JSONP、JSON5 和 BSON。 6. **高性能**:Newtonsoft.Json 优化了性能,尤其是在大规模数据处理时。 在压缩包中的 `newtonsoft.json_dll` 文件是 ...

    JSON查看工具

    在实际工作中,掌握一款好的JSON查看工具能够极大地提高开发效率,尤其是在处理JSON数据时。无论是前端开发者调试API,还是后端开发者分析返回的数据,甚至是数据分析人员处理JSON格式的日志文件,这些工具都是不可...

    Delphi精品工具集-json查看工具

    BSON是一种二进制形式的JSON,它在保留了JSON语义的同时,通过二进制编码实现了更高的传输和存储效率,特别适用于大数据量的场景。这种转换功能为开发者提供了更多的选择,特别是在需要优化性能的应用中。 此外,这...

    BSON格式解释编程开发技术共4页.pdf.zip

    2. **二进制效率**:BSON是二进制编码的,相比纯文本的JSON,它在存储和传输上更高效。在处理大数据量时,这种优势尤其明显,因为它减少了内存占用和I/O操作。 3. **支持复杂数据类型**:JSON仅支持基本的数据类型...

    common-thrift-bson-3.0.0-M2.zip

    Thrift 使用二进制协议进行高效的数据序列化,名为 BSON(Binary JSON)。BSON 类似于 JSON,但更适用于性能敏感的应用,因为它在内存中处理更有效。BSON 支持各种数据类型,包括整数、浮点数、字符串、日期和嵌套...

    json工程源码 VC6.0和VS2010

    对于大量数据交换,可以考虑使用二进制JSON格式,如BSON或CBOR,它们在解析速度和传输效率上有优势。然而,这可能需要额外的库支持。 8. 错误处理: 在实际应用中,需要考虑JSON解析错误、网络通信异常等情况,...

    json、xml解析库x2struct-master

    - **性能优化**: 专业的解析库通常经过优化,能够高效地处理大数据量的JSON和XML,提高程序运行效率。 在实际应用中,你可以使用`x2struct`来处理从API接口获取的数据,存储和加载应用程序配置,或者在不同系统之间...

    json资料(python and c)

    - **性能优化**:对于大量数据,考虑使用二进制格式如BSON或CBOR,它们在存储和传输效率上可能优于JSON。 通过理解和熟练运用这些知识点,无论是Python还是C,都可以高效地处理JSON数据,实现不同程序间的数据交换...

Global site tag (gtag.js) - Google Analytics