readme.md (rapidjson-1.0.2) | : | readme.md (rapidjson-1.1.0) | ||
---|---|---|---|---|
 |  | |||
 |  | |||
## A fast JSON parser/generator for C++ with both SAX/DOM style API | ## A fast JSON parser/generator for C++ with both SAX/DOM style API | |||
Tencent is pleased to support the open source community by making RapidJSON avai lable. | Tencent is pleased to support the open source community by making RapidJSON avai lable. | |||
Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. | Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. | |||
* [RapidJSON GitHub](https://github.com/miloyip/rapidjson/) | * [RapidJSON GitHub](https://github.com/miloyip/rapidjson/) | |||
* RapidJSON Documentation | * RapidJSON Documentation | |||
* [English](http://miloyip.github.io/rapidjson/) | * [English](http://rapidjson.org/) | |||
* [简体中文](http://miloyip.github.io/rapidjson/zh-cn/) | * [简体中文](http://rapidjson.org/zh-cn/) | |||
* [GitBook](https://www.gitbook.com/book/miloyip/rapidjson/) with downloadable PDF/EPUB/MOBI, without API reference. | * [GitBook](https://www.gitbook.com/book/miloyip/rapidjson/) with downloadable PDF/EPUB/MOBI, without API reference. | |||
## Build status | ## Build status | |||
| [Linux][lin-link] | [Windows][win-link] | [Coveralls][cov-link] | | | [Linux][lin-link] | [Windows][win-link] | [Coveralls][cov-link] | | |||
| :---------------: | :-----------------: | :-------------------: | | | :---------------: | :-----------------: | :-------------------: | | |||
| ![lin-badge] | ![win-badge] | ![cov-badge] | | | ![lin-badge] | ![win-badge] | ![cov-badge] | | |||
[lin-badge]: https://travis-ci.org/miloyip/rapidjson.png?branch=master "Travis b uild status" | [lin-badge]: https://travis-ci.org/miloyip/rapidjson.png?branch=master "Travis b uild status" | |||
[lin-link]: https://travis-ci.org/miloyip/rapidjson "Travis build status" | [lin-link]: https://travis-ci.org/miloyip/rapidjson "Travis build status" | |||
[win-badge]: https://ci.appveyor.com/api/projects/status/u658dcuwxo14a8m9/branch /master "AppVeyor build status" | [win-badge]: https://ci.appveyor.com/api/projects/status/u658dcuwxo14a8m9/branch /master "AppVeyor build status" | |||
[win-link]: https://ci.appveyor.com/project/miloyip/rapidjson/branch/master "Ap pVeyor build status" | [win-link]: https://ci.appveyor.com/project/miloyip/rapidjson/branch/master "Ap pVeyor build status" | |||
[cov-badge]: https://coveralls.io/repos/miloyip/rapidjson/badge.png?branch=maste r | [cov-badge]: https://coveralls.io/repos/miloyip/rapidjson/badge.png?branch=maste r | |||
[cov-link]: https://coveralls.io/r/miloyip/rapidjson?branch=master | [cov-link]: https://coveralls.io/r/miloyip/rapidjson?branch=master | |||
## Introduction | ## Introduction | |||
RapidJSON is a JSON parser and generator for C++. It was inspired by [RapidXml]( http://rapidxml.sourceforge.net/). | RapidJSON is a JSON parser and generator for C++. It was inspired by [RapidXml]( http://rapidxml.sourceforge.net/). | |||
* RapidJSON is small but complete. It supports both SAX and DOM style API. The S AX parser is only a half thousand lines of code. | * RapidJSON is **small** but **complete**. It supports both SAX and DOM style AP I. The SAX parser is only a half thousand lines of code. | |||
* RapidJSON is fast. Its performance can be comparable to `strlen()`. It also op tionally supports SSE2/SSE4.2 for acceleration. | * RapidJSON is **fast**. Its performance can be comparable to `strlen()`. It als o optionally supports SSE2/SSE4.2 for acceleration. | |||
* RapidJSON is self-contained. It does not depend on external libraries such as BOOST. It even does not depend on STL. | * RapidJSON is **self-contained** and **header-only**. It does not depend on ext ernal libraries such as BOOST. It even does not depend on STL. | |||
* RapidJSON is memory friendly. Each JSON value occupies exactly 16/20 bytes for most 32/64-bit machines (excluding text string). By default it uses a fast memo ry allocator, and the parser allocates memory compactly during parsing. | * RapidJSON is **memory-friendly**. Each JSON value occupies exactly 16 bytes fo r most 32/64-bit machines (excluding text string). By default it uses a fast mem ory allocator, and the parser allocates memory compactly during parsing. | |||
* RapidJSON is Unicode friendly. It supports UTF-8, UTF-16, UTF-32 (LE & BE), an d their detection, validation and transcoding internally. For example, you can r ead a UTF-8 file and let RapidJSON transcode the JSON strings into UTF-16 in the DOM. It also supports surrogates and "\u0000" (null character). | * RapidJSON is **Unicode-friendly**. It supports UTF-8, UTF-16, UTF-32 (LE & BE) , and their detection, validation and transcoding internally. For example, you c an read a UTF-8 file and let RapidJSON transcode the JSON strings into UTF-16 in the DOM. It also supports surrogates and "\u0000" (null character). | |||
More features can be read [here](doc/features.md). | More features can be read [here](doc/features.md). | |||
JSON(JavaScript Object Notation) is a light-weight data exchange format. RapidJS ON should be in fully compliance with RFC7159/ECMA-404. More information about J SON can be obtained at | JSON(JavaScript Object Notation) is a light-weight data exchange format. RapidJS ON should be in fully compliance with RFC7159/ECMA-404, with optional support of relaxed syntax. More information about JSON can be obtained at | |||
* [Introducing JSON](http://json.org/) | * [Introducing JSON](http://json.org/) | |||
* [RFC7159: The JavaScript Object Notation (JSON) Data Interchange Format](http: //www.ietf.org/rfc/rfc7159.txt) | * [RFC7159: The JavaScript Object Notation (JSON) Data Interchange Format](http: //www.ietf.org/rfc/rfc7159.txt) | |||
* [Standard ECMA-404: The JSON Data Interchange Format](http://www.ecma-internat ional.org/publications/standards/Ecma-404.htm) | * [Standard ECMA-404: The JSON Data Interchange Format](http://www.ecma-internat ional.org/publications/standards/Ecma-404.htm) | |||
## Highlights in v1.1 (2016-8-25) | ||||
* Added [JSON Pointer](doc/pointer.md) | ||||
* Added [JSON Schema](doc/schema.md) | ||||
* Added [relaxed JSON syntax](doc/dom.md) (comment, trailing comma, NaN/Infinity | ||||
) | ||||
* Iterating array/object with [C++11 Range-based for loop](doc/tutorial.md) | ||||
* Reduce memory overhead of each `Value` from 24 bytes to 16 bytes in x86-64 arc | ||||
hitecture. | ||||
For other changes please refer to [change log](CHANGELOG.md). | ||||
## Compatibility | ## Compatibility | |||
RapidJSON is cross-platform. Some platform/compiler combinations which have been tested are shown as follows. | RapidJSON is cross-platform. Some platform/compiler combinations which have been tested are shown as follows. | |||
* Visual C++ 2008/2010/2013 on Windows (32/64-bit) | * Visual C++ 2008/2010/2013 on Windows (32/64-bit) | |||
* GNU C++ 3.8.x on Cygwin | * GNU C++ 3.8.x on Cygwin | |||
* Clang 3.4 on Mac OS X (32/64-bit) and iOS | * Clang 3.4 on Mac OS X (32/64-bit) and iOS | |||
* Clang 3.4 on Android NDK | * Clang 3.4 on Android NDK | |||
Users can build and run the unit tests on their platform/compiler. | Users can build and run the unit tests on their platform/compiler. | |||
## Installation | ## Installation | |||
RapidJSON is a header-only C++ library. Just copy the `include/rapidjson` folder to system or project's include path. | RapidJSON is a header-only C++ library. Just copy the `include/rapidjson` folder to system or project's include path. | |||
RapidJSON uses following software as its dependencies: | RapidJSON uses following software as its dependencies: | |||
* [CMake](http://www.cmake.org) as a general build tool | * [CMake](https://cmake.org/) as a general build tool | |||
* (optional)[Doxygen](http://www.doxygen.org) to build documentation | * (optional)[Doxygen](http://www.doxygen.org) to build documentation | |||
* (optional)[googletest](https://code.google.com/p/googletest/) for unit and per formance testing | * (optional)[googletest](https://github.com/google/googletest) for unit and perf ormance testing | |||
To generate user documentation and run tests please proceed with the steps below : | To generate user documentation and run tests please proceed with the steps below : | |||
1. Execute `git submodule update --init` to get the files of thirdparty submodul es (google test). | 1. Execute `git submodule update --init` to get the files of thirdparty submodul es (google test). | |||
2. Create directory called `build` in rapidjson source directory. | 2. Create directory called `build` in rapidjson source directory. | |||
3. Change to `build` directory and run `cmake ..` command to configure your buil d. Windows users can do the same with cmake-gui application. | 3. Change to `build` directory and run `cmake ..` command to configure your buil d. Windows users can do the same with cmake-gui application. | |||
4. On Windows, build the solution found in the build directory. On Linux, run `m ake` from the build directory. | 4. On Windows, build the solution found in the build directory. On Linux, run `m ake` from the build directory. | |||
On successfull build you will find compiled test and example binaries in `bin` | On successfull build you will find compiled test and example binaries in `bin` | |||
directory. The generated documentation will be available in `doc/html` | directory. The generated documentation will be available in `doc/html` | |||
skipping to change at line 129 | skipping to change at line 139 | |||
return 0; | return 0; | |||
} | } | |||
~~~~~~~~~~ | ~~~~~~~~~~ | |||
Note that this example did not handle potential errors. | Note that this example did not handle potential errors. | |||
The following diagram shows the process. | The following diagram shows the process. | |||
 |  | |||
More [examples](https://github.com/miloyip/rapidjson/tree/master/example) are av | More [examples](https://github.com/miloyip/rapidjson/tree/master/example) are av | |||
ailable. | ailable: | |||
* DOM API | ||||
* [tutorial](https://github.com/miloyip/rapidjson/blob/master/example/tutorial/ | ||||
tutorial.cpp): Basic usage of DOM API. | ||||
* SAX API | ||||
* [simplereader](https://github.com/miloyip/rapidjson/blob/master/example/simpl | ||||
ereader/simplereader.cpp): Dumps all SAX events while parsing a JSON by `Reader` | ||||
. | ||||
* [condense](https://github.com/miloyip/rapidjson/blob/master/example/condense/ | ||||
condense.cpp): A command line tool to rewrite a JSON, with all whitespaces remov | ||||
ed. | ||||
* [pretty](https://github.com/miloyip/rapidjson/blob/master/example/pretty/pret | ||||
ty.cpp): A command line tool to rewrite a JSON with indents and newlines by `Pre | ||||
ttyWriter`. | ||||
* [capitalize](https://github.com/miloyip/rapidjson/blob/master/example/capital | ||||
ize/capitalize.cpp): A command line tool to capitalize strings in JSON. | ||||
* [messagereader](https://github.com/miloyip/rapidjson/blob/master/example/mess | ||||
agereader/messagereader.cpp): Parse a JSON message with SAX API. | ||||
* [serialize](https://github.com/miloyip/rapidjson/blob/master/example/serializ | ||||
e/serialize.cpp): Serialize a C++ object into JSON with SAX API. | ||||
* [jsonx](https://github.com/miloyip/rapidjson/blob/master/example/jsonx/jsonx. | ||||
cpp): Implements a `JsonxWriter` which stringify SAX events into [JSONx](https:/ | ||||
/www-01.ibm.com/support/knowledgecenter/SS9H2Y_7.1.0/com.ibm.dp.doc/json_jsonx.h | ||||
tml) (a kind of XML) format. The example is a command line tool which converts i | ||||
nput JSON into JSONx format. | ||||
* Schema | ||||
* [schemavalidator](https://github.com/miloyip/rapidjson/blob/master/example/sc | ||||
hemavalidator/schemavalidator.cpp) : A command line tool to validate a JSON with | ||||
a JSON schema. | ||||
* Advanced | ||||
* [prettyauto](https://github.com/miloyip/rapidjson/blob/master/example/prettya | ||||
uto/prettyauto.cpp): A modified version of [pretty](https://github.com/miloyip/r | ||||
apidjson/blob/master/example/pretty/pretty.cpp) to automatically handle JSON wit | ||||
h any UTF encodings. | ||||
* [parsebyparts](https://github.com/miloyip/rapidjson/blob/master/example/parse | ||||
byparts/parsebyparts.cpp): Implements an `AsyncDocumentParser` which can parse J | ||||
SON in parts, using C++11 thread. | ||||
* [filterkey](https://github.com/miloyip/rapidjson/blob/master/example/filterke | ||||
y/filterkey.cpp): A command line tool to remove all values with user-specified k | ||||
ey. | ||||
* [filterkeydom](https://github.com/miloyip/rapidjson/blob/master/example/filte | ||||
rkeydom/filterkeydom.cpp): Same tool as above, but it demonstrates how to use a | ||||
generator to populate a `Document`. | ||||
End of changes. 12 change blocks. | ||||
11 lines changed or deleted | 23 lines changed or added |