2014-08-10 21:32:12 +08:00

2014-06-26 11:38:41 +08:00
Copyright (c) 2011-2014 Milo Yip (miloyip@gmail .com)
2014-07-08 14:11:08 +08:00
[RapidJSON GitHub ](https://github.com/miloyip/rapidjson/ )
[RapidJSON Documentation ](http://miloyip.github.io/rapidjson/ )
2014-06-26 11:38:41 +08:00
## Introduction
2014-07-28 13:21:31 +08:00
RapidJSON is a JSON parser and generator for C++. It was inspired by [RapidXml ](http://rapidxml.sourceforge.net/ ).
2014-06-26 11:38:41 +08:00
2014-06-30 14:02:30 +08:00
* RapidJSON is small but complete. It supports both SAX and DOM style API. The SAX parser is only a half thousand lines of code.
2014-06-26 11:38:41 +08:00
2014-06-30 14:02:30 +08:00
* RapidJSON is fast. Its performance can be comparable to `strlen()` . It also optionally supports SSE2/SSE4.1 for acceleration.
2014-06-26 11:38:41 +08:00
2014-06-30 14:02:30 +08:00
* RapidJSON is self-contained. It does not depend on external libraries such as BOOST. It even does not depend on STL.
2014-06-26 11:38:41 +08:00
2014-06-30 14:02:30 +08:00
* 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 memory allocator, and the parser allocates memory compactly during parsing.
2014-06-26 11:38:41 +08:00
2014-07-04 10:36:15 +08:00
* RapidJSON is Unicode friendly. It supports UTF-8, UTF-16, UTF-32 (LE & BE), and their detection, validation and transcoding internally. For example, you can 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).
2014-06-27 13:55:45 +08:00
2014-06-29 16:30:55 +08:00
More features can be read [here ](doc/features.md ).
2014-06-26 11:38:41 +08:00
2014-08-11 15:33:27 +02:00
JSON(JavaScript Object Notation) is a light-weight data exchange format. RapidJSON should be in fully compliance with RFC7159/ECMA-404. More information about JSON can be obtained at
2014-06-26 12:05:46 +08:00
* [Introducing JSON ](http://json.org/ )
2014-08-11 15:33:27 +02:00
* [RFC7159: The JavaScript Object Notation (JSON) Data Interchange Format ](http://www.ietf.org/rfc/rfc7159.txt )
2014-06-26 12:05:46 +08:00
* [Standard ECMA-404: The JSON Data Interchange Format ](http://www.ecma-international.org/publications/standards/Ecma-404.htm )
## Compatibility
2014-06-30 14:02:30 +08:00
RapidJSON is cross-platform. Some platform/compiler combinations which have been tested are shown as follows.
2014-06-26 12:05:46 +08:00
* Visual C++ 2008/2010/2013 on Windows (32/64-bit)
2014-06-26 12:06:40 +08:00
* GNU C++ 3.8.x on Cygwin
2014-06-26 12:05:46 +08:00
* Clang 3.4 on Mac OS X (32/64-bit) and iOS
* Clang 3.4 on Android NDK
Users can build and run the unit tests on their platform/compiler.
2014-06-26 11:38:41 +08:00
## Installation
2014-07-05 17:10:43 +02:00
RapidJSON is a header-only C++ library. Just copy the `include/rapidjson` folder to system or project's include path.
2014-06-26 11:46:16 +08:00
To build the tests and examples:
2014-06-26 11:38:41 +08:00
2014-09-09 14:05:57 +08:00
1. Execute `git submodule update --init` to get the files of thirdparty submodules (google test).
2. Obtain [premake4 ](http://industriousone.com/premake/download ).
3. Copy premake4 executable to `rapidjson/build` (or system path).
4. Change directory to `rapidjson/build/` , run `premake.bat` on Windows, `premake.sh` on Linux or other platforms.
5. On Windows, build the solution at `rapidjson/build/vs2008/` or `/vs2010/` .
6. On other platforms, run GNU `make` at `rapidjson/build/gmake/` (e.g., `make -f test.make config=release32` ; `make -f example.make config=debug32` ).
7. On success, the executables are generated at `rapidjson/bin` .
2014-06-28 19:44:11 +08:00
2014-07-05 17:10:43 +02:00
To build the [Doxygen ](http://doxygen.org ) documentation:
1. Obtain and install [Doxygen ](http://doxygen.org/download.html ).
2. In the top-level directory, run `doxygen build/Doxyfile` .
3. Browse the generated documentation in `doc/html` .
2014-06-28 19:44:11 +08:00
## Usage at a glance
This simple example parses a JSON string into a document (DOM), make a simple modification of the DOM, and finally stringify the DOM to a JSON string.
2014-07-05 17:10:43 +02:00
~~~~~~~~~~cpp
2014-07-08 14:11:08 +08:00
// rapidjson/example/simpledom/simpledom.cpp`
2014-06-28 19:44:11 +08:00
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
using namespace rapidjson;
int main() {
// 1. Parse a JSON string into DOM.
const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
Document d;
2014-06-29 15:03:38 +08:00
d.Parse(json);
2014-06-28 19:44:11 +08:00
// 2. Modify it by DOM.
2014-06-29 14:18:33 +08:00
Value& s = d["stars"];
s.SetInt(s.GetInt() + 1);
2014-06-28 19:44:11 +08:00
// 3. Stringify the DOM
StringBuffer buffer;
Writer< StringBuffer > writer(buffer);
d.Accept(writer);
2014-06-28 20:37:22 +08:00
// Output {"project":"rapidjson","stars":11}
2014-06-28 19:44:11 +08:00
std::cout < < buffer.GetString ( ) < < std::endl ;
return 0;
}
2014-07-05 17:10:43 +02:00
~~~~~~~~~~
2014-06-28 19:44:11 +08:00
2014-07-04 10:36:15 +08:00
Note that this example did not handle potential errors.
2014-06-28 19:44:11 +08:00
The following diagram shows the process.
2014-07-05 17:10:43 +02:00

2014-06-28 19:44:11 +08:00
2014-07-04 10:36:15 +08:00
More [examples ](example/ ) are available.