Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: voxelbustersold/rapidjson-gitbook
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: miloyip/rapidjson-gitbook
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Able to merge. These branches can be automatically merged.
  • 2 commits
  • 71 files changed
  • 1 contributor

Commits on Aug 25, 2016

  1. Update to v1.1.0

    miloyip committed Aug 25, 2016
    Copy the full SHA
    beccb49 View commit details

Commits on Sep 29, 2017

  1. Update

    miloyip committed Sep 29, 2017
    Copy the full SHA
    e1c4586 View commit details
Showing with 4,181 additions and 1,217 deletions.
  1. +56 −25 en/README.md
  2. +2 −0 en/SUMMARY.md
  3. BIN en/doc/diagram/architecture.png
  4. BIN en/doc/diagram/insituparsing.png
  5. BIN en/doc/diagram/iterative-parser-states-diagram.png
  6. BIN en/doc/diagram/move1.png
  7. BIN en/doc/diagram/move2.png
  8. BIN en/doc/diagram/move3.png
  9. BIN en/doc/diagram/normalparsing.png
  10. BIN en/doc/diagram/simpledom.png
  11. BIN en/doc/diagram/tutorial.png
  12. BIN en/doc/diagram/utilityclass.png
  13. +7 −3 en/doc/dom.md
  14. +73 −69 en/doc/dom.zh-cn.md
  15. +2 −2 en/doc/encoding.md
  16. +35 −35 en/doc/encoding.zh-cn.md
  17. +62 −4 en/doc/faq.md
  18. +152 −93 en/doc/faq.zh-cn.md
  19. +9 −1 en/doc/features.md
  20. +44 −36 en/doc/features.zh-cn.md
  21. +22 −5 en/doc/internals.md
  22. +363 −0 en/doc/internals.zh-cn.md
  23. +31 −0 en/doc/npm.md
  24. +3 −3 en/doc/performance.md
  25. +4 −4 en/doc/performance.zh-cn.md
  26. +4 −4 en/doc/pointer.md
  27. +234 −0 en/doc/pointer.zh-cn.md
  28. +54 −20 en/doc/sax.md
  29. +72 −61 en/doc/sax.zh-cn.md
  30. +237 −0 en/doc/schema.md
  31. +237 −0 en/doc/schema.zh-cn.md
  32. +66 −14 en/doc/stream.md
  33. +120 −68 en/doc/stream.zh-cn.md
  34. +52 −31 en/doc/tutorial.md
  35. +142 −123 en/doc/tutorial.zh-cn.md
  36. +1 −1 rapidjson
  37. +70 −39 zh-cn/README.md
  38. +2 −0 zh-cn/SUMMARY.md
  39. BIN zh-cn/doc/diagram/architecture.png
  40. BIN zh-cn/doc/diagram/insituparsing.png
  41. BIN zh-cn/doc/diagram/iterative-parser-states-diagram.png
  42. BIN zh-cn/doc/diagram/move1.png
  43. BIN zh-cn/doc/diagram/move2.png
  44. BIN zh-cn/doc/diagram/move3.png
  45. BIN zh-cn/doc/diagram/normalparsing.png
  46. BIN zh-cn/doc/diagram/simpledom.png
  47. BIN zh-cn/doc/diagram/tutorial.png
  48. BIN zh-cn/doc/diagram/utilityclass.png
  49. +7 −3 zh-cn/doc/dom.md
  50. +73 −69 zh-cn/doc/dom.zh-cn.md
  51. +2 −2 zh-cn/doc/encoding.md
  52. +35 −35 zh-cn/doc/encoding.zh-cn.md
  53. +62 −4 zh-cn/doc/faq.md
  54. +152 −93 zh-cn/doc/faq.zh-cn.md
  55. +9 −1 zh-cn/doc/features.md
  56. +44 −36 zh-cn/doc/features.zh-cn.md
  57. +22 −5 zh-cn/doc/internals.md
  58. +363 −0 zh-cn/doc/internals.zh-cn.md
  59. +31 −0 zh-cn/doc/npm.md
  60. +3 −3 zh-cn/doc/performance.md
  61. +4 −4 zh-cn/doc/performance.zh-cn.md
  62. +4 −4 zh-cn/doc/pointer.md
  63. +234 −0 zh-cn/doc/pointer.zh-cn.md
  64. +54 −20 zh-cn/doc/sax.md
  65. +72 −61 zh-cn/doc/sax.zh-cn.md
  66. +237 −0 zh-cn/doc/schema.md
  67. +237 −0 zh-cn/doc/schema.zh-cn.md
  68. +66 −14 zh-cn/doc/stream.md
  69. +120 −68 zh-cn/doc/stream.zh-cn.md
  70. +52 −31 zh-cn/doc/tutorial.md
  71. +142 −123 zh-cn/doc/tutorial.zh-cn.md
81 changes: 56 additions & 25 deletions en/README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
![](doc/logo/rapidjson.png)
![RapidJSON logo](doc/logo/rapidjson.png)

![](https://img.shields.io/badge/release-v1.0.2-blue.png)
![Release version](https://img.shields.io/badge/release-v1.1.0-blue.svg)

## 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 available.

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/Tencent/rapidjson/)
* RapidJSON Documentation
* [English](http://miloyip.github.io/rapidjson/)
* [简体中文](http://miloyip.github.io/rapidjson/zh-cn/)
* [English](http://rapidjson.org/)
* [简体中文](http://rapidjson.org/zh-cn/)
* [GitBook](https://www.gitbook.com/book/miloyip/rapidjson/) with downloadable PDF/EPUB/MOBI, without API reference.

## Build status
@@ -20,33 +20,43 @@ Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights
| :---------------: | :-----------------: | :-------------------: |
| ![lin-badge] | ![win-badge] | ![cov-badge] |

[lin-badge]: https://travis-ci.org/miloyip/rapidjson.png?branch=master "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-link]: https://ci.appveyor.com/project/miloyip/rapidjson/branch/master "AppVeyor build status"
[cov-badge]: https://coveralls.io/repos/miloyip/rapidjson/badge.png?branch=master
[cov-link]: https://coveralls.io/r/miloyip/rapidjson?branch=master
[lin-badge]: https://travis-ci.org/Tencent/rapidjson.svg?branch=master "Travis build status"
[lin-link]: https://travis-ci.org/Tencent/rapidjson "Travis build status"
[win-badge]: https://ci.appveyor.com/api/projects/status/l6qulgqahcayidrf/branch/master?svg=true "AppVeyor build status"
[win-link]: https://ci.appveyor.com/project/miloyip/rapidjson-0fdqj/branch/master "AppVeyor build status"
[cov-badge]: https://coveralls.io/repos/Tencent/rapidjson/badge.svg?branch=master "Coveralls coverage"
[cov-link]: https://coveralls.io/r/Tencent/rapidjson?branch=master "Coveralls coverage"

## Introduction

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 SAX parser is only a half thousand lines of code.
* RapidJSON is **small** but **complete**. It supports both SAX and DOM style API. The SAX parser is only a half thousand lines of code.

* RapidJSON is fast. Its performance can be comparable to `strlen()`. It also optionally supports SSE2/SSE4.2 for acceleration.
* RapidJSON is **fast**. Its performance can be comparable to `strlen()`. It also 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 external 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 memory allocator, and the parser allocates memory compactly during parsing.
* RapidJSON is **memory-friendly**. Each JSON value occupies exactly 16 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.

* 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).
* 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).

More features can be read [here](doc/features.md).

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
JSON(JavaScript Object Notation) is a light-weight data exchange format. RapidJSON 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/)
* [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-international.org/publications/standards/Ecma-404.htm)
* [RFC7159: The JavaScript Object Notation (JSON) Data Interchange Format](https://tools.ietf.org/html/rfc7159)
* [Standard ECMA-404: The JSON Data Interchange Format](https://www.ecma-international.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 architecture.

For other changes please refer to [change log](CHANGELOG.md).

## Compatibility

@@ -63,9 +73,9 @@ Users can build and run the unit tests on their platform/compiler.
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:
* [CMake](http://www.cmake.org) as a general build tool
* (optional)[Doxygen](http://www.doxygen.org) to build documentation
* (optional)[googletest](https://code.google.com/p/googletest/) for unit and performance testing
* [CMake](https://cmake.org/) as a general build tool
* (optional) [Doxygen](http://www.doxygen.org) to build documentation
* (optional) [googletest](https://github.com/google/googletest) for unit and performance testing

To generate user documentation and run tests please proceed with the steps below:

@@ -74,7 +84,7 @@ To generate user documentation and run tests please proceed with the steps below
3. Change to `build` directory and run `cmake ..` command to configure your build. Windows users can do the same with cmake-gui application.
4. On Windows, build the solution found in the build directory. On Linux, run `make` from the build directory.

On successfull build you will find compiled test and example binaries in `bin`
On successful build you will find compiled test and example binaries in `bin`
directory. The generated documentation will be available in `doc/html`
directory of the build tree. To run tests after finished build please run `make
test` or `ctest` from your build tree. You can get detailed output using `ctest
@@ -126,4 +136,25 @@ The following diagram shows the process.

![simpledom](doc/diagram/simpledom.png)

More [examples](https://github.com/miloyip/rapidjson/tree/master/example) are available.
More [examples](https://github.com/Tencent/rapidjson/tree/master/example) are available:

* DOM API
* [tutorial](https://github.com/Tencent/rapidjson/blob/master/example/tutorial/tutorial.cpp): Basic usage of DOM API.

* SAX API
* [simplereader](https://github.com/Tencent/rapidjson/blob/master/example/simplereader/simplereader.cpp): Dumps all SAX events while parsing a JSON by `Reader`.
* [condense](https://github.com/Tencent/rapidjson/blob/master/example/condense/condense.cpp): A command line tool to rewrite a JSON, with all whitespaces removed.
* [pretty](https://github.com/Tencent/rapidjson/blob/master/example/pretty/pretty.cpp): A command line tool to rewrite a JSON with indents and newlines by `PrettyWriter`.
* [capitalize](https://github.com/Tencent/rapidjson/blob/master/example/capitalize/capitalize.cpp): A command line tool to capitalize strings in JSON.
* [messagereader](https://github.com/Tencent/rapidjson/blob/master/example/messagereader/messagereader.cpp): Parse a JSON message with SAX API.
* [serialize](https://github.com/Tencent/rapidjson/blob/master/example/serialize/serialize.cpp): Serialize a C++ object into JSON with SAX API.
* [jsonx](https://github.com/Tencent/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.html) (a kind of XML) format. The example is a command line tool which converts input JSON into JSONx format.

* Schema
* [schemavalidator](https://github.com/Tencent/rapidjson/blob/master/example/schemavalidator/schemavalidator.cpp) : A command line tool to validate a JSON with a JSON schema.

* Advanced
* [prettyauto](https://github.com/Tencent/rapidjson/blob/master/example/prettyauto/prettyauto.cpp): A modified version of [pretty](https://github.com/Tencent/rapidjson/blob/master/example/pretty/pretty.cpp) to automatically handle JSON with any UTF encodings.
* [parsebyparts](https://github.com/Tencent/rapidjson/blob/master/example/parsebyparts/parsebyparts.cpp): Implements an `AsyncDocumentParser` which can parse JSON in parts, using C++11 thread.
* [filterkey](https://github.com/Tencent/rapidjson/blob/master/example/filterkey/filterkey.cpp): A command line tool to remove all values with user-specified key.
* [filterkeydom](https://github.com/Tencent/rapidjson/blob/master/example/filterkeydom/filterkeydom.cpp): Same tool as above, but it demonstrates how to use a generator to populate a `Document`.
2 changes: 2 additions & 0 deletions en/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -2,10 +2,12 @@

* [Features](doc/features.md)
* [Tutorial](doc/tutorial.md)
* [Pointer](doc/pointer.md)
* [Stream](doc/stream.md)
* [Encoding](doc/encoding.md)
* [DOM](doc/dom.md)
* [SAX](doc/sax.md)
* [Schema](doc/schema.md)
* [Performance](doc/performance.md)
* [Internals](doc/internals.md)
* [FAQ](doc/faq.md)
Binary file modified en/doc/diagram/architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/insituparsing.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/iterative-parser-states-diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/move1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/move2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/move3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/normalparsing.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/simpledom.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/tutorial.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified en/doc/diagram/utilityclass.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 7 additions & 3 deletions en/doc/dom.md
Original file line number Diff line number Diff line change
@@ -115,6 +115,10 @@ Parse flags | Meaning
`kParseIterativeFlag` | Iterative(constant complexity in terms of function call stack size) parsing.
`kParseStopWhenDoneFlag` | After parsing a complete JSON root from stream, stop further processing the rest of stream. When this flag is used, parser will not generate `kParseErrorDocumentRootNotSingular` error. Using this flag for parsing multiple JSONs in the same stream.
`kParseFullPrecisionFlag` | Parse number in full precision (slower). If this flag is not set, the normal precision (faster) is used. Normal precision has maximum 3 [ULP](http://en.wikipedia.org/wiki/Unit_in_the_last_place) error.
`kParseCommentsFlag` | Allow one-line `// ...` and multi-line `/* ... */` comments (relaxed JSON syntax).
`kParseNumbersAsStringsFlag` | Parse numerical type values as strings.
`kParseTrailingCommasFlag` | Allow trailing commas at the end of objects and arrays (relaxed JSON syntax).
`kParseNanAndInfFlag` | Allow parsing `NaN`, `Inf`, `Infinity`, `-Inf` and `-Infinity` as `double` values (relaxed JSON syntax).
By using a non-type template parameter, instead of a function parameter, C++ compiler can generate code which is optimized for specified combinations, improving speed, and reducing code size (if only using a single specialization). The downside is the flags needed to be determined in compile-time.
@@ -124,7 +128,7 @@ And the `InputStream` is type of input stream.
## Parse Error {#ParseError}
When the parse processing succeeded, the `Document` contains the parse results. When there is an error, the original DOM is *unchanged*. And the error state of parsing can be obtained by `bool HasParseError()`, `ParseErrorCode GetParseError()` and `size_t GetParseOffet()`.
When the parse processing succeeded, the `Document` contains the parse results. When there is an error, the original DOM is *unchanged*. And the error state of parsing can be obtained by `bool HasParseError()`, `ParseErrorCode GetParseError()` and `size_t GetParseOffset()`.
Parse Error Code | Description
--------------------------------------------|---------------------------------------------------
@@ -159,8 +163,8 @@ Here shows an example of parse error handling.
Document d;
if (d.Parse(json).HasParseError()) {
fprintf(stderr, "\nError(offset %u): %s\n",
(unsigned)reader.GetErrorOffset(),
GetParseError_En(reader.GetParseErrorCode()));
(unsigned)d.GetErrorOffset(),
GetParseError_En(d.GetParseError()));
// ...
}
~~~~~~~~~~
Loading