对于基础知识的学习和理解,请参看两者的官方网站:
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效率更高。
详细可执行代码参考附件内容。
相关推荐
在Golang中,BSON(Binary JSON)和JSON(JavaScript Object Notation)是两种常见的数据序列化格式。BSON提供了一种二进制形式的数据表示,适合于高性能的网络通信和数据库存储,而JSON则是一种轻量级的人可读文本...
总结来说,`json-to-bson-go`是一个针对Golang开发者的实用工具,能够根据JSON数据自动生成BSON映射的Go结构体,从而简化数据序列化和反序列化的操作,提高开发效率并降低错误率。通过利用这个模块,开发者可以更加...
在IT领域,BSON(Binary JSON)是一种用于在网络间高效传输JSON数据的二进制格式。它与JSON(JavaScript Object Notation)类似,但增加了二进制编码,使得数据在网络传输时能以更小的体积和更快的速度进行。本示例...
BSON是一种二进制形式的数据表示方法,它在JSON基础上增加了对日期、二进制数据、大型整数等类型的支持,同时以更紧凑的格式存储数据,提高了序列化和反序列化的效率。 BSON协议在Android中的应用通常涉及以下几个...
它可以提高数据处理的效率,简化代码,使Android应用能够更流畅地与使用BSON的服务器进行通信。 总结来说,"Jackson JSON处理器的一个BSON生器和解析器"是Java开发者处理BSON数据的一种工具,通过它,可以充分利用...
在IT行业中,BSON(Binary JSON)是一种数据序列化格式,它类似于JSON,但使用二进制表示形式,使得在存储和传输数据时更高效。BSON-cpp是C++实现的一个库,允许开发者在C++项目中方便地处理BSON数据。本篇文章将...
BSON(Binary JSON)是MongoDB中用于存储数据的二进制格式,它结合了JSON的易读性和二进制数据的效率。本教程将详细介绍MongoDB中的BSON使用,以及如何通过Go语言的mgo驱动进行操作。 1. **BSON数据类型与结构体...
BSON是一种二进制表示JSON数据的方式,通常用于提高数据传输效率。在Json.NET中,你可以使用 `BsonDataDocument` 和 `BsonSerializer` 类进行BSON操作: ```csharp // 序列化对象到BSON字节数组 byte[] bsonBytes =...
BSON的设计目标是在保持JSON的易读性和灵活性的同时,提高在网络中的传输效率和存储效率。BSON库在Python中扮演的角色就是对这种数据格式进行编码和解码。 "Bson-0.4.2.tar.gz"是一个源代码压缩包,通常用于分发...
BSON(Binary JSON)是一种数据格式,它扩展了JSON(JavaScript Object Notation)标准,允许存储二进制数据和其他类型的数据,如日期和对象ID,使其更适合于数据库存储和传输。 首先,我们需要理解BSON的重要性。...
对于`bson`库,它提供了一种高效的方式来处理BSON(Binary JSON),这是一种二进制形式的JSON,适合在内存中快速操作。xbson是`bson`的一个C++封装,它提供了头文件接口,无需编译库文件,使得集成更加方便。在`...
5. **Json.NET 支持多种数据格式**:除了标准的 JSON,还支持 JSONP、JSON5 和 BSON。 6. **高性能**:Newtonsoft.Json 优化了性能,尤其是在大规模数据处理时。 在压缩包中的 `newtonsoft.json_dll` 文件是 ...
在实际工作中,掌握一款好的JSON查看工具能够极大地提高开发效率,尤其是在处理JSON数据时。无论是前端开发者调试API,还是后端开发者分析返回的数据,甚至是数据分析人员处理JSON格式的日志文件,这些工具都是不可...
BSON是一种二进制形式的JSON,它在保留了JSON语义的同时,通过二进制编码实现了更高的传输和存储效率,特别适用于大数据量的场景。这种转换功能为开发者提供了更多的选择,特别是在需要优化性能的应用中。 此外,这...
2. **二进制效率**:BSON是二进制编码的,相比纯文本的JSON,它在存储和传输上更高效。在处理大数据量时,这种优势尤其明显,因为它减少了内存占用和I/O操作。 3. **支持复杂数据类型**:JSON仅支持基本的数据类型...
Thrift 使用二进制协议进行高效的数据序列化,名为 BSON(Binary JSON)。BSON 类似于 JSON,但更适用于性能敏感的应用,因为它在内存中处理更有效。BSON 支持各种数据类型,包括整数、浮点数、字符串、日期和嵌套...
对于大量数据交换,可以考虑使用二进制JSON格式,如BSON或CBOR,它们在解析速度和传输效率上有优势。然而,这可能需要额外的库支持。 8. 错误处理: 在实际应用中,需要考虑JSON解析错误、网络通信异常等情况,...
- **性能优化**: 专业的解析库通常经过优化,能够高效地处理大数据量的JSON和XML,提高程序运行效率。 在实际应用中,你可以使用`x2struct`来处理从API接口获取的数据,存储和加载应用程序配置,或者在不同系统之间...
- **性能优化**:对于大量数据,考虑使用二进制格式如BSON或CBOR,它们在存储和传输效率上可能优于JSON。 通过理解和熟练运用这些知识点,无论是Python还是C,都可以高效地处理JSON数据,实现不同程序间的数据交换...