This project started as a little excuse to exercise some of the cool new C++11 features. Over time, people actually started to use the JSON library (yey!) and started to help improve it by proposing features, finding bugs, or even fixing my mistakes. I am really thankful for this and try to keep track of all the helpers.
To make it as easy as possible for you to contribute and for me to keep an overview, here are a few guidelines which should help us avoid all kinds of unnecessary work or disappointment. And of course, this document is subject to discussion, so please create an issue or a pull request if you find a way to improve it!
Usually, all issues are tracked publicly on GitHub. If you want to make a private report (e.g., for a vulnerability or to attach an example that is not meant to be published), please send an email to mail@nlohmann.me.
Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.
Clearly describe the issue:
Please stick to the provided issue template (bug report if possible. For questions, feature or support requests, please open a discussion.
:exclamation: Before you make any changes, note the single-header files single_include/nlohmann/json.hpp
and single_include/nlohmann/json_fwd.hpp
are generated from the source files in the include/nlohmann
directory. Please do not edit the files single_include/nlohmann/json.hpp
and single_include/nlohmann/json_fwd.hpp
directly, but change the include/nlohmann
sources and regenerate the files by executing make amalgamate
.
To make changes, you need to edit the following files:
include/nlohmann/*
- These files are the sources of the library. Before testing or creating a pull request, execute make amalgamate
to regenerate single_include/nlohmann/json.hpp
and single_include/nlohmann/json_fwd.hpp
.
tests/src/unit-*.cpp
- These files contain the doctest unit tests which currently cover 100 % of the library's code. Before creating a pull request, execute make pretty
to make sure that the style is correct, as this will be checked by the CI.
If you add or change a feature, please also add a unit test to this file. The unit tests can be compiled and executed with
$ mkdir build $ cd build $ cmake .. $ cmake --build . $ ctest
The test cases are also executed with several different compilers on Travis once you open a pull request.
make pretty
which runs Artistic Style to fix indentation. If possible, run it before opening the pull request. Otherwise, we shall run it afterward.The C++11 support varies between different compilers and versions. Please note the list of supported compilers. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support. Please refrain from proposing changes that work around these compiler's limitations with #ifdef
s or other means.
Specifically, I am aware of compilation problems with Microsoft Visual Studio (there even is an issue label for this kind of bug). I understand that even in 2016, complete C++11 support isn‘t there yet. But please also understand that I do not want to drop features or uglify the code just to make Microsoft’s sub-standard compiler happy. The past has shown that there are ways to express the functionality such that the code compiles with the most recent MSVC - unfortunately, this is not the main objective of the project.
Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.
std::map
with std::less
is used by default.) Note this behavior conforms to the standard, and we shall not change it to any other order. If you do want to preserve the insertion order, you can specialize the object type with containers like tsl::ordered_map
or nlohmann::fifo_map
.Please do not open pull requests that address multiple issues.
The following areas really need contribution:
json.hpp
header, and I am not aware of approaches similar to re2c
for parsing.