mirror of
https://github.com/nlohmann/json.git
synced 2026-02-17 17:14:00 +00:00
Compare commits
1157 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce1dccf347 | ||
|
|
92484f0caf | ||
|
|
ebc6849b71 | ||
|
|
3c76ff353d | ||
|
|
d45183d426 | ||
|
|
3b3b6e8e69 | ||
|
|
f28fc2261a | ||
|
|
72bff90ed9 | ||
|
|
3113a52a7d | ||
|
|
184e9c6aa7 | ||
|
|
d1cda6888e | ||
|
|
88ddb12afc | ||
|
|
e54b6ace94 | ||
|
|
ab0e8b2f3a | ||
|
|
1ca6ec1dc0 | ||
|
|
1856f38c85 | ||
|
|
afebb6a3bb | ||
|
|
106f9f5436 | ||
|
|
9eb5e2c271 | ||
|
|
9e3c4ad11f | ||
|
|
314e4e7699 | ||
|
|
9a51fb4da2 | ||
|
|
7bf007f2bc | ||
|
|
980795b644 | ||
|
|
f3bd755cab | ||
|
|
4c871c58f8 | ||
|
|
c23f5dcea6 | ||
|
|
2e1b1061cd | ||
|
|
261caec2de | ||
|
|
f80827d068 | ||
|
|
9a70c60fa5 | ||
|
|
fb8482db76 | ||
|
|
920f64c01c | ||
|
|
293748a9a9 | ||
|
|
e8d9963abe | ||
|
|
a9a4ff61c6 | ||
|
|
f7ae143a93 | ||
|
|
8419bfbbd2 | ||
|
|
569d275f65 | ||
|
|
383743c6c0 | ||
|
|
7de009edd1 | ||
|
|
772bb3cc20 | ||
|
|
0693945230 | ||
|
|
64d6daa76e | ||
|
|
7c2d4f1852 | ||
|
|
9e2f185ac6 | ||
|
|
c5e731774a | ||
|
|
25d205c16d | ||
|
|
fa76f2efd7 | ||
|
|
8890b935fd | ||
|
|
daba1b6a0b | ||
|
|
0e3a0b730b | ||
|
|
541ee62a05 | ||
|
|
c9a02cbc59 | ||
|
|
f4c01601fa | ||
|
|
24fe572d98 | ||
|
|
8e9a8792a9 | ||
|
|
af775ddbb8 | ||
|
|
48d7a32daa | ||
|
|
5b4855dea2 | ||
|
|
cc937deaf6 | ||
|
|
430f03512c | ||
|
|
ea5aed0769 | ||
|
|
de75cf89f7 | ||
|
|
52ca35b2b0 | ||
|
|
7b8ddadd83 | ||
|
|
b5ddd99adf | ||
|
|
4c4f60f438 | ||
|
|
1af5601a2a | ||
|
|
e423aea64a | ||
|
|
5696660eba | ||
|
|
c4d6626745 | ||
|
|
6d2981db82 | ||
|
|
87df1d6708 | ||
|
|
fa1425b87c | ||
|
|
73d0095154 | ||
|
|
4b46abf97c | ||
|
|
8e067c0c3c | ||
|
|
cea3f24ff9 | ||
|
|
61cc07ff38 | ||
|
|
734e2b73cf | ||
|
|
7820b5eccb | ||
|
|
77f8e2f987 | ||
|
|
c215b77936 | ||
|
|
992c836b30 | ||
|
|
715c98b404 | ||
|
|
6c9a401ebc | ||
|
|
16ffdbcb20 | ||
|
|
73b1629a15 | ||
|
|
1b1bd0e3e6 | ||
|
|
33c6511dd0 | ||
|
|
89650c99dd | ||
|
|
b0c380b0f8 | ||
|
|
be4fba7baf | ||
|
|
f193427e91 | ||
|
|
24b6e028a9 | ||
|
|
3094640446 | ||
|
|
ef40673acb | ||
|
|
d468f8c4e6 | ||
|
|
59cde1ad6e | ||
|
|
1a66679929 | ||
|
|
33df3250c3 | ||
|
|
92da334862 | ||
|
|
2e281ba64b | ||
|
|
a99fcb4e7d | ||
|
|
917d9d8bc3 | ||
|
|
7c8f0a4186 | ||
|
|
b27a142ec0 | ||
|
|
a8cc7a1bc8 | ||
|
|
af99090742 | ||
|
|
8ba7f69ab4 | ||
|
|
8a4af820c7 | ||
|
|
19f8f1c075 | ||
|
|
5ec44fe9e3 | ||
|
|
727ee7d03e | ||
|
|
d300a8e268 | ||
|
|
0b803d0a5f | ||
|
|
23440eb86e | ||
|
|
45e1e3d48a | ||
|
|
5e480b56d8 | ||
|
|
1b43a45bec | ||
|
|
184dab60e6 | ||
|
|
f775922ca8 | ||
|
|
546e148b24 | ||
|
|
8665e25942 | ||
|
|
e0d890cc23 | ||
|
|
97a388802d | ||
|
|
7c523338c5 | ||
|
|
14ca1f6f09 | ||
|
|
12efeadc2e | ||
|
|
f585fe4eec | ||
|
|
90adf6ec20 | ||
|
|
0c0851dbea | ||
|
|
bab4a15748 | ||
|
|
60439aff05 | ||
|
|
73d1b55aba | ||
|
|
615366447a | ||
|
|
73727c989c | ||
|
|
75f4678b96 | ||
|
|
c204ac82e0 | ||
|
|
7b82e4b4c8 | ||
|
|
1b3df3a63f | ||
|
|
99ee4c1eaf | ||
|
|
5cb6d7187d | ||
|
|
4e81c1db47 | ||
|
|
e2045eae53 | ||
|
|
a85bc358f7 | ||
|
|
3457e7bc5b | ||
|
|
54bd1b5124 | ||
|
|
7435d54e97 | ||
|
|
4912231450 | ||
|
|
b91805e1f0 | ||
|
|
f89f8b2d0b | ||
|
|
8be303d4fb | ||
|
|
1df836ce40 | ||
|
|
8af49d4be5 | ||
|
|
1a66527dca | ||
|
|
b05ea3de55 | ||
|
|
ec60ff3451 | ||
|
|
647711fad1 | ||
|
|
737816d0cd | ||
|
|
e75adc21a5 | ||
|
|
b90529c36d | ||
|
|
82c93680d1 | ||
|
|
e2e0ecd867 | ||
|
|
248db1e423 | ||
|
|
7410763731 | ||
|
|
cafc2d057a | ||
|
|
da97cf7895 | ||
|
|
295d65ada7 | ||
|
|
fcba9ec537 | ||
|
|
41994ba028 | ||
|
|
b21d7810fa | ||
|
|
c1d6478584 | ||
|
|
9ae6796a38 | ||
|
|
31ce7e1e59 | ||
|
|
fd250ae2b1 | ||
|
|
5c08b84dec | ||
|
|
da14286abb | ||
|
|
c607b5c2ac | ||
|
|
91e0032853 | ||
|
|
b41b13047c | ||
|
|
15e757c42b | ||
|
|
0e94ba8857 | ||
|
|
4f5c345817 | ||
|
|
8608f42187 | ||
|
|
5e7acbf05e | ||
|
|
268f5a3d0a | ||
|
|
839681ff9f | ||
|
|
3dcd360139 | ||
|
|
05b97c473a | ||
|
|
c87b080cc5 | ||
|
|
5b71bf09a1 | ||
|
|
bb1b4c934e | ||
|
|
e45eaf6e30 | ||
|
|
0b5e8f859b | ||
|
|
9fd031b6f4 | ||
|
|
41b2c69bdb | ||
|
|
cd53790993 | ||
|
|
e569b9736b | ||
|
|
ba5d37ba4b | ||
|
|
64ef100ebf | ||
|
|
8acaf5bdbc | ||
|
|
c77a0be5f3 | ||
|
|
aba8b58492 | ||
|
|
22b59693f1 | ||
|
|
1f31a5b808 | ||
|
|
f5a53de845 | ||
|
|
21726d8d8f | ||
|
|
df572aca79 | ||
|
|
4391bf5615 | ||
|
|
1e360bb32b | ||
|
|
002410410f | ||
|
|
72afe53fa0 | ||
|
|
76123fab76 | ||
|
|
fdff42bc3d | ||
|
|
039e2f03bc | ||
|
|
7f4722a75d | ||
|
|
08805f7f14 | ||
|
|
988077e046 | ||
|
|
7d19aed567 | ||
|
|
569c00eb18 | ||
|
|
6151b056eb | ||
|
|
bade3b3e6c | ||
|
|
76b195d7d1 | ||
|
|
cd34358e7c | ||
|
|
5eb9f5fd4f | ||
|
|
f49356e703 | ||
|
|
e0f8eb1710 | ||
|
|
6dc89e47fc | ||
|
|
8de710bbe7 | ||
|
|
195d773bc5 | ||
|
|
e7f2d2646a | ||
|
|
6b20f6d1ef | ||
|
|
82cd8c8d02 | ||
|
|
f256587c4f | ||
|
|
c06b5c5c10 | ||
|
|
3283352db3 | ||
|
|
c20dd7522f | ||
|
|
94dfecd487 | ||
|
|
8963aae57d | ||
|
|
5aceb0e029 | ||
|
|
e7a7e4f81f | ||
|
|
e333562633 | ||
|
|
eb6de822bb | ||
|
|
c1642affaa | ||
|
|
a46afd4008 | ||
|
|
54c67dcfec | ||
|
|
99ea12f304 | ||
|
|
d26b3f1fe5 | ||
|
|
345846b514 | ||
|
|
c9509ccf97 | ||
|
|
86b3d06a93 | ||
|
|
6e5b895f87 | ||
|
|
4b55f0ebd6 | ||
|
|
c90bf5e0f1 | ||
|
|
dd008545d1 | ||
|
|
054b0250be | ||
|
|
ab44a50d98 | ||
|
|
b32a6b8c75 | ||
|
|
19437c15de | ||
|
|
e523312fa2 | ||
|
|
d2c3592908 | ||
|
|
d1e13d5128 | ||
|
|
0ea0d7d860 | ||
|
|
efdfd3aa5b | ||
|
|
391303521a | ||
|
|
76ecb2bd60 | ||
|
|
db0b9732d4 | ||
|
|
e60002a1b3 | ||
|
|
966989a3f5 | ||
|
|
850d856aae | ||
|
|
3d67ec40a6 | ||
|
|
85c768084b | ||
|
|
67fb517ccd | ||
|
|
80e95844f6 | ||
|
|
aad55219f8 | ||
|
|
96dd4ffa19 | ||
|
|
7737a29518 | ||
|
|
f434942371 | ||
|
|
c819a2d732 | ||
|
|
5851daa576 | ||
|
|
c136b6f200 | ||
|
|
7d51214045 | ||
|
|
a27dd3a6f6 | ||
|
|
669ebf51bc | ||
|
|
3d589fd032 | ||
|
|
e6aa700360 | ||
|
|
93bb71232d | ||
|
|
897879bccb | ||
|
|
0f4978e503 | ||
|
|
4414f94cd5 | ||
|
|
f5cae64e52 | ||
|
|
09cda57309 | ||
|
|
cf3ca3b78c | ||
|
|
7b3cbfff23 | ||
|
|
9b1c058810 | ||
|
|
18e0430bfe | ||
|
|
5b5f0090a1 | ||
|
|
d53ef95067 | ||
|
|
c7a69ae03e | ||
|
|
f513c46749 | ||
|
|
024fec8a9b | ||
|
|
a09193e967 | ||
|
|
21d23982ca | ||
|
|
8a9133c6b2 | ||
|
|
f1fabd1ba2 | ||
|
|
dad4916f9e | ||
|
|
486f3a2d16 | ||
|
|
40461c6c55 | ||
|
|
71597be294 | ||
|
|
cd800522e4 | ||
|
|
7dee868a42 | ||
|
|
8585d35c92 | ||
|
|
acff23efb2 | ||
|
|
bb752fd30c | ||
|
|
0ba98b6fe0 | ||
|
|
00d6e27194 | ||
|
|
8e681d1e57 | ||
|
|
15625ca4a7 | ||
|
|
a332142194 | ||
|
|
fe086d7432 | ||
|
|
d3496347fc | ||
|
|
504012a3db | ||
|
|
a0e0579374 | ||
|
|
1b2fabe802 | ||
|
|
e3bb156f82 | ||
|
|
b753cb6ee7 | ||
|
|
f0ca96d462 | ||
|
|
f1c543cb7b | ||
|
|
7b05e1a687 | ||
|
|
f697fec522 | ||
|
|
87bccbc335 | ||
|
|
b38ecb5ca9 | ||
|
|
b3ac36db93 | ||
|
|
e67df7c385 | ||
|
|
552622343e | ||
|
|
566f6dcf30 | ||
|
|
6f12749ef6 | ||
|
|
ac42333749 | ||
|
|
015c88783e | ||
|
|
df2feabb72 | ||
|
|
63ecbfd36b | ||
|
|
07b78c993c | ||
|
|
8b123107c0 | ||
|
|
32065c8045 | ||
|
|
e99b783def | ||
|
|
3dc5d95422 | ||
|
|
b9a8425cc8 | ||
|
|
5ee651c387 | ||
|
|
dad6051f37 | ||
|
|
4b5433578a | ||
|
|
0395f3fdfb | ||
|
|
66ffac9e8a | ||
|
|
6f3bebff5c | ||
|
|
2fd214c14b | ||
|
|
e7695306f1 | ||
|
|
84f2e64a7c | ||
|
|
9add24ff10 | ||
|
|
2f007ca092 | ||
|
|
a5c27ede32 | ||
|
|
7c2a187258 | ||
|
|
e191dd833f | ||
|
|
82b95ca664 | ||
|
|
f2cdb3d594 | ||
|
|
c2044205ef | ||
|
|
c2db4a118d | ||
|
|
70b7455a13 | ||
|
|
4e6f548c0b | ||
|
|
08d781058c | ||
|
|
6e4910d5c5 | ||
|
|
112a6f4e53 | ||
|
|
747f7d36d1 | ||
|
|
b79a1a2678 | ||
|
|
7b97100ffd | ||
|
|
04a1666ef2 | ||
|
|
1fbb82de89 | ||
|
|
889006f006 | ||
|
|
e1ca484bc1 | ||
|
|
b27d2adcbe | ||
|
|
d415293d41 | ||
|
|
c98364834f | ||
|
|
fd4a0ecabc | ||
|
|
88dc7c11fa | ||
|
|
afb959a083 | ||
|
|
ac793e957f | ||
|
|
5fa5c17bc6 | ||
|
|
6caad48e44 | ||
|
|
e12c2ee6a8 | ||
|
|
52f934cbbf | ||
|
|
cea39dfaa8 | ||
|
|
6661ec755b | ||
|
|
0f065edff6 | ||
|
|
92ef19696a | ||
|
|
bfdf0d1ce6 | ||
|
|
85de93ba93 | ||
|
|
c98169d0d5 | ||
|
|
fb91aa81da | ||
|
|
2ba554e442 | ||
|
|
1a9d76679a | ||
|
|
d19c5ced4b | ||
|
|
c043ba6978 | ||
|
|
f2e1643039 | ||
|
|
2d5f0c0549 | ||
|
|
c09a4cbbd7 | ||
|
|
0a51fb22ed | ||
|
|
881cd3f420 | ||
|
|
790e7ca9e9 | ||
|
|
ce39330ff8 | ||
|
|
c4ab8f827e | ||
|
|
daea213b44 | ||
|
|
0c2ed00ebe | ||
|
|
5b245dae06 | ||
|
|
e42db27d6d | ||
|
|
3aef1a582e | ||
|
|
a3bf0131c4 | ||
|
|
adc73d6d5f | ||
|
|
ed62129f8e | ||
|
|
52adf3fd5b | ||
|
|
9a576fe1d9 | ||
|
|
c7bd01edf2 | ||
|
|
9e507dfad5 | ||
|
|
16b63d3197 | ||
|
|
8a35fdd8f5 | ||
|
|
9ddc69f3a9 | ||
|
|
99cb095e89 | ||
|
|
0f4131d138 | ||
|
|
0c3ffe12cd | ||
|
|
b8dff3bc16 | ||
|
|
723c875604 | ||
|
|
dfa371c436 | ||
|
|
9b764ee5d6 | ||
|
|
978255da8c | ||
|
|
8b88e1b266 | ||
|
|
b78457b792 | ||
|
|
00d841bfda | ||
|
|
d6c78dacd8 | ||
|
|
5beea35443 | ||
|
|
15ef9b8a35 | ||
|
|
6a656ed375 | ||
|
|
2afbd33472 | ||
|
|
87744fd594 | ||
|
|
0719287e44 | ||
|
|
31fe2f5825 | ||
|
|
962da00171 | ||
|
|
fba1bcdd0b | ||
|
|
56ac7908f1 | ||
|
|
dbcb032f22 | ||
|
|
ecf895f2d1 | ||
|
|
19d2dec8b6 | ||
|
|
8b9f51179e | ||
|
|
cfc2e8391c | ||
|
|
6d2c0a7928 | ||
|
|
c42273d2a0 | ||
|
|
2df8f12c09 | ||
|
|
734297ff45 | ||
|
|
01e05d89e9 | ||
|
|
b686cc6ad9 | ||
|
|
5febd04a26 | ||
|
|
4aedae400e | ||
|
|
e24df7eca9 | ||
|
|
2a21146160 | ||
|
|
4b316ec528 | ||
|
|
9b32f72584 | ||
|
|
db9bf953f3 | ||
|
|
717106eced | ||
|
|
aea47422a2 | ||
|
|
6b6e554067 | ||
|
|
951d0920fc | ||
|
|
e2f6cf7f46 | ||
|
|
2d2b98a50a | ||
|
|
d4469233ac | ||
|
|
42b4cdd4d0 | ||
|
|
ef55626296 | ||
|
|
5bea6f383a | ||
|
|
4c161161f0 | ||
|
|
d7e57e3b73 | ||
|
|
f3e43d7c6f | ||
|
|
186a9fd44d | ||
|
|
e48114bbd6 | ||
|
|
628be157a2 | ||
|
|
c40c8ac92e | ||
|
|
a9f4094580 | ||
|
|
180d249f6c | ||
|
|
d3d87674c8 | ||
|
|
9d9c5216d7 | ||
|
|
6f99d5b2e9 | ||
|
|
d4e49873b7 | ||
|
|
97a25de938 | ||
|
|
d62d48fc48 | ||
|
|
90273e930c | ||
|
|
ff72f38863 | ||
|
|
b992acc2e7 | ||
|
|
08fdfcca9a | ||
|
|
c28bf823bc | ||
|
|
b15fc13dd1 | ||
|
|
3a34f2d82c | ||
|
|
782570d46f | ||
|
|
4f6b63e492 | ||
|
|
ea667db446 | ||
|
|
89efe627fe | ||
|
|
af9b21151c | ||
|
|
3a5cf9bd0a | ||
|
|
c32d2e5b3c | ||
|
|
8d393b5eff | ||
|
|
3fa0610856 | ||
|
|
50ee0a62f5 | ||
|
|
4c821c9e9c | ||
|
|
d07596a0ea | ||
|
|
7881783745 | ||
|
|
0b1b6307a5 | ||
|
|
40aff4182f | ||
|
|
60057a4728 | ||
|
|
a690a9f2d2 | ||
|
|
c2e80a72d7 | ||
|
|
9578c0f700 | ||
|
|
b4dbebffcd | ||
|
|
62dfdf3f5d | ||
|
|
5d586b0192 | ||
|
|
19d119e18c | ||
|
|
6b12e40478 | ||
|
|
d025b6aaf7 | ||
|
|
19cd206d99 | ||
|
|
a0aa6ad2b2 | ||
|
|
d37ca2eba8 | ||
|
|
50e251f5f6 | ||
|
|
6a6fbea62c | ||
|
|
1e495945f1 | ||
|
|
bbb6bd9de5 | ||
|
|
b0c47abd88 | ||
|
|
f75e195db3 | ||
|
|
3425527970 | ||
|
|
06e2a291b1 | ||
|
|
3b069b4b4c | ||
|
|
99e0d8b339 | ||
|
|
f47cf152a8 | ||
|
|
d4d51460ab | ||
|
|
3336194306 | ||
|
|
53b501a785 | ||
|
|
cf7786887c | ||
|
|
c333679a96 | ||
|
|
cc36c65a89 | ||
|
|
a58ed3cd17 | ||
|
|
20bcf1015b | ||
|
|
dc6e9b6188 | ||
|
|
0f9585685a | ||
|
|
8edb0cd15c | ||
|
|
a93ec07c8c | ||
|
|
3d597dda5d | ||
|
|
40160f482a | ||
|
|
bba688f53e | ||
|
|
cea2426731 | ||
|
|
8a872927e8 | ||
|
|
b14629b0a6 | ||
|
|
54db53c230 | ||
|
|
d60851168e | ||
|
|
67a06834b0 | ||
|
|
b9c3b8d688 | ||
|
|
86579209c8 | ||
|
|
31a6c0910e | ||
|
|
f547679de5 | ||
|
|
2d474b5273 | ||
|
|
836f1c4189 | ||
|
|
cd43600e6f | ||
|
|
773b33e016 | ||
|
|
c5711f3072 | ||
|
|
483a58f625 | ||
|
|
dbebf8de47 | ||
|
|
100bf3ef2c | ||
|
|
710f8a2686 | ||
|
|
1de80e8af4 | ||
|
|
63c2c62f19 | ||
|
|
95474e420d | ||
|
|
b026591e9e | ||
|
|
bfe4788e32 | ||
|
|
84072fbd6d | ||
|
|
b8b4362ca4 | ||
|
|
c5cf32e34d | ||
|
|
43b8285249 | ||
|
|
855cdcf05c | ||
|
|
8feaf8dc94 | ||
|
|
9355f05888 | ||
|
|
87eafd8d6a | ||
|
|
80dcf22fc3 | ||
|
|
28dbe4e651 | ||
|
|
89f6068385 | ||
|
|
dfa4e83cd8 | ||
|
|
e3e941ef2b | ||
|
|
01470f388b | ||
|
|
4d7c29923e | ||
|
|
4b9c2f1287 | ||
|
|
4e49829851 | ||
|
|
122afbf128 | ||
|
|
e3e6cbecc7 | ||
|
|
65dfc97d40 | ||
|
|
ff0b18d10c | ||
|
|
c7afb34e57 | ||
|
|
754ce0b991 | ||
|
|
d9e2dd03bf | ||
|
|
f4126e4dd8 | ||
|
|
f5f6dac800 | ||
|
|
70bbf19527 | ||
|
|
5b809b9737 | ||
|
|
9cfb777b65 | ||
|
|
f9fe0193d5 | ||
|
|
758c4addc1 | ||
|
|
0f6b8aa718 | ||
|
|
1ab580d6e9 | ||
|
|
fe71e7df1f | ||
|
|
9374eaa013 | ||
|
|
c8a6ce79ea | ||
|
|
fc9b528ec9 | ||
|
|
8fcd01631f | ||
|
|
625cf7e3f7 | ||
|
|
757d2c6c7a | ||
|
|
5407333224 | ||
|
|
21ec0e7806 | ||
|
|
a186106bde | ||
|
|
38c2e20ce8 | ||
|
|
30331fa21f | ||
|
|
60da36aee2 | ||
|
|
491c9780a7 | ||
|
|
6751d650be | ||
|
|
9e560ca40c | ||
|
|
144cf6a4c7 | ||
|
|
5cca44c161 | ||
|
|
70b2c3f45e | ||
|
|
2a9393af00 | ||
|
|
bb740c43fb | ||
|
|
aa842b4a27 | ||
|
|
f473f74fb0 | ||
|
|
068c7acda9 | ||
|
|
0c40c8e3be | ||
|
|
a4274d7766 | ||
|
|
875b2da95d | ||
|
|
9381f6c4da | ||
|
|
e291c6c3d2 | ||
|
|
a1354184ce | ||
|
|
0c6b1f8a24 | ||
|
|
776758d7a2 | ||
|
|
b86d2148ef | ||
|
|
06c788e4fd | ||
|
|
01d3a006b1 | ||
|
|
06815d274e | ||
|
|
c085e3bac2 | ||
|
|
7b8fd864e2 | ||
|
|
6b3912d936 | ||
|
|
f84ac523aa | ||
|
|
41f9b32554 | ||
|
|
d69242c6ba | ||
|
|
059f21aada | ||
|
|
224f99070b | ||
|
|
fc48b8ac2b | ||
|
|
af070744ae | ||
|
|
54ef5f7b47 | ||
|
|
9c4919ff34 | ||
|
|
909b439b03 | ||
|
|
0f04e42dd5 | ||
|
|
b1441f3485 | ||
|
|
bd0326cbc1 | ||
|
|
ae155c4734 | ||
|
|
bf4d744d1a | ||
|
|
d1b30250d6 | ||
|
|
f1cd15ce7e | ||
|
|
9ff0cc0f02 | ||
|
|
03f06e1993 | ||
|
|
1b5867bdcf | ||
|
|
27c65b860b | ||
|
|
0234e53e23 | ||
|
|
b49ce351eb | ||
|
|
a646c9c599 | ||
|
|
8cec55a271 | ||
|
|
345a106d73 | ||
|
|
967f9144d4 | ||
|
|
7d14f167b8 | ||
|
|
b04543ecc5 | ||
|
|
1a6d7f5bca | ||
|
|
f7075be93a | ||
|
|
f2dfa09aec | ||
|
|
83a9c60dbd | ||
|
|
716485a965 | ||
|
|
7a4a16a7db | ||
|
|
1f72c38861 | ||
|
|
83f1d2c81b | ||
|
|
4151f2d297 | ||
|
|
5b53f03e7c | ||
|
|
9a9d0ba3df | ||
|
|
5436407b7e | ||
|
|
85ce4d7b53 | ||
|
|
d1479e47bb | ||
|
|
513eb3ab5f | ||
|
|
0200f2dc62 | ||
|
|
6408402ad2 | ||
|
|
057b1e606b | ||
|
|
2c17c1b1b2 | ||
|
|
973402c11e | ||
|
|
b9f3149451 | ||
|
|
6bf93b3d06 | ||
|
|
82fb613763 | ||
|
|
22b9a301d6 | ||
|
|
c95ff863bf | ||
|
|
265c5b5207 | ||
|
|
b84705d557 | ||
|
|
c8191c8172 | ||
|
|
c2d55109c1 | ||
|
|
9f5dccbab5 | ||
|
|
926af6d50b | ||
|
|
ed8516dc39 | ||
|
|
c485d46cea | ||
|
|
6fd77cea4a | ||
|
|
0ffa18aab8 | ||
|
|
662a9b8f3c | ||
|
|
4746a4c536 | ||
|
|
163f8397fd | ||
|
|
8d88a1da2a | ||
|
|
d284c86dd1 | ||
|
|
922fe693e1 | ||
|
|
1cfdc2a753 | ||
|
|
77d6f70602 | ||
|
|
d6afaa8e16 | ||
|
|
5976caf032 | ||
|
|
16af771277 | ||
|
|
bf8fdac99a | ||
|
|
7bb7033383 | ||
|
|
c75865d88c | ||
|
|
b210f2dbf4 | ||
|
|
0164b10e10 | ||
|
|
affa3bf4e9 | ||
|
|
f2873e6d3a | ||
|
|
c7f366520c | ||
|
|
f642934b18 | ||
|
|
6746a57524 | ||
|
|
eb08e8b09b | ||
|
|
4b5c61075f | ||
|
|
38e4935db0 | ||
|
|
cdde1a9436 | ||
|
|
d870826811 | ||
|
|
2f6260751c | ||
|
|
42fa3f0568 | ||
|
|
cd9701b123 | ||
|
|
1305e03557 | ||
|
|
77bb7af5d9 | ||
|
|
4d3053cd42 | ||
|
|
94d9b7bc86 | ||
|
|
ec03c9c53e | ||
|
|
6198439f59 | ||
|
|
4139bb6572 | ||
|
|
c154f3133d | ||
|
|
50a3f3b301 | ||
|
|
781fd09f2d | ||
|
|
daf8dcdb32 | ||
|
|
250e5bf43d | ||
|
|
030cf674ef | ||
|
|
3857e55290 | ||
|
|
9f103d19d7 | ||
|
|
9f8b270ed9 | ||
|
|
9c6ef74a28 | ||
|
|
ba0b35f414 | ||
|
|
37fd20b2eb | ||
|
|
7d771c71ed | ||
|
|
f997758cad | ||
|
|
40ba5a8b7b | ||
|
|
7f359017d2 | ||
|
|
708eb9613b | ||
|
|
889b269a4f | ||
|
|
a6b028286b | ||
|
|
d566bb81c4 | ||
|
|
1e20887cff | ||
|
|
447c6a670f | ||
|
|
3e15b551e0 | ||
|
|
fbac056c38 | ||
|
|
b56117b148 | ||
|
|
af94e712c7 | ||
|
|
1d87097741 | ||
|
|
e60e458a7e | ||
|
|
794dae8911 | ||
|
|
68081cd112 | ||
|
|
07bc82d3a7 | ||
|
|
f1482d1f01 | ||
|
|
f2c71fafda | ||
|
|
63e4249e9f | ||
|
|
b8012876a5 | ||
|
|
1554baa01d | ||
|
|
a9d5ae4fad | ||
|
|
e247e01a6e | ||
|
|
d0d8070422 | ||
|
|
e678c075dd | ||
|
|
cb3d455bd2 | ||
|
|
3494014ba0 | ||
|
|
1f25ec5d36 | ||
|
|
29f9fe6ae9 | ||
|
|
5839795725 | ||
|
|
b4cea6825d | ||
|
|
b2543e06d8 | ||
|
|
be6b417c87 | ||
|
|
317883b21b | ||
|
|
4e8089b9de | ||
|
|
7e6a6f978e | ||
|
|
c847e0eea2 | ||
|
|
6d427acdde | ||
|
|
f00898331e | ||
|
|
a32de3b528 | ||
|
|
d257149f36 | ||
|
|
bbe40641a3 | ||
|
|
6b89785fba | ||
|
|
c833b22b7b | ||
|
|
d359684f2b | ||
|
|
034d5ed97e | ||
|
|
be1d3de49b | ||
|
|
aa2679a8ce | ||
|
|
d5ee5830ed | ||
|
|
1c21c87e6f | ||
|
|
7e750ec1fa | ||
|
|
3d405c6883 | ||
|
|
8e43d476d3 | ||
|
|
f5cb089f89 | ||
|
|
1eafac7220 | ||
|
|
c0c72b5b62 | ||
|
|
60e6f822fa | ||
|
|
e5999c6c82 | ||
|
|
74bb11d92c | ||
|
|
907484fb43 | ||
|
|
47bc402113 | ||
|
|
ee19acaf05 | ||
|
|
9b401972a0 | ||
|
|
e2dbe7a69f | ||
|
|
0d91113ccf | ||
|
|
88819449c2 | ||
|
|
23bd2bce35 | ||
|
|
178441cdfd | ||
|
|
2bc685f6b4 | ||
|
|
837b81d672 | ||
|
|
33abccf847 | ||
|
|
7dc268ef42 | ||
|
|
4cdc61e493 | ||
|
|
03b391c37b | ||
|
|
12b4555b13 | ||
|
|
877d96c1d8 | ||
|
|
d54d6bb84c | ||
|
|
fe628b585b | ||
|
|
b443edf49e | ||
|
|
ce0b3fe5a3 | ||
|
|
145188f264 | ||
|
|
69be3fa842 | ||
|
|
5e3f9c8969 | ||
|
|
e951d198f4 | ||
|
|
046f6da82f | ||
|
|
bae8e70137 | ||
|
|
87c5e32e1f | ||
|
|
a00149f8ee | ||
|
|
1ab26ab367 | ||
|
|
74cbd30cd0 | ||
|
|
a7f3938391 | ||
|
|
a9b4cb8bf8 | ||
|
|
3a9ccfac22 | ||
|
|
98ad3c3ac1 | ||
|
|
0f03543861 | ||
|
|
e9bbf5aaba | ||
|
|
dd45ba6f89 | ||
|
|
c236b596c9 | ||
|
|
949061079a | ||
|
|
e1b89dd1d6 | ||
|
|
9f6c86f233 | ||
|
|
4765070318 | ||
|
|
cdd3b5a68c | ||
|
|
767637877b | ||
|
|
f8d640b185 | ||
|
|
245a69d554 | ||
|
|
ea4d71ee21 | ||
|
|
0f36541d65 | ||
|
|
9755cc75b1 | ||
|
|
7e2c4b3ead | ||
|
|
69c615e127 | ||
|
|
4d3bf433b4 | ||
|
|
8b46eb8ec0 | ||
|
|
6a20790056 | ||
|
|
60b3703c62 | ||
|
|
d173517212 | ||
|
|
a3063c2419 | ||
|
|
db33629990 | ||
|
|
712529cd32 | ||
|
|
09b91406c6 | ||
|
|
ab7d55e7ae | ||
|
|
cf9bf2d913 | ||
|
|
ff3221a375 | ||
|
|
328eb55dc4 | ||
|
|
010ea126f3 | ||
|
|
d7029c37aa | ||
|
|
f7575dee94 | ||
|
|
42a8c64499 | ||
|
|
f0edab2363 | ||
|
|
383a29a924 | ||
|
|
871cebaf84 | ||
|
|
8381cd6020 | ||
|
|
e4c2829aea | ||
|
|
1dd99d04b6 | ||
|
|
888f5b9f60 | ||
|
|
55be721615 | ||
|
|
acb7e0558d | ||
|
|
e3b036348b | ||
|
|
1399abc583 | ||
|
|
e4cc62e653 | ||
|
|
6de9d4035a | ||
|
|
dbdcb3fec8 | ||
|
|
6e129fbfb7 | ||
|
|
f87f4c06f9 | ||
|
|
33be4e7f1f | ||
|
|
a084e90f39 | ||
|
|
048330b14b | ||
|
|
22a6b956e8 | ||
|
|
ad241a2260 | ||
|
|
6e8791912f | ||
|
|
69ed19e483 | ||
|
|
09fd1a04b8 | ||
|
|
7107072f71 | ||
|
|
2cf0f299ad | ||
|
|
937cca762f | ||
|
|
91e45a8dd0 | ||
|
|
f78671de8e | ||
|
|
2e5208d5cd | ||
|
|
c6fbd305b0 | ||
|
|
38597ac628 | ||
|
|
57b32d9773 | ||
|
|
73b28e8f92 | ||
|
|
1178a8152a | ||
|
|
0fffbb8488 | ||
|
|
ab64419bb6 | ||
|
|
9952a3c456 | ||
|
|
03b78fee63 | ||
|
|
0e55af23fc | ||
|
|
57afd293aa | ||
|
|
a507b9b46a | ||
|
|
36dc786106 | ||
|
|
706be50596 | ||
|
|
303e873ae8 | ||
|
|
f6f7fed99a | ||
|
|
f24e4f680e | ||
|
|
fe00b368ae | ||
|
|
2f94c30bad | ||
|
|
4e2fb1a533 | ||
|
|
dfafd2c259 | ||
|
|
92e28c3153 | ||
|
|
c3fac19692 | ||
|
|
3f089cab2b | ||
|
|
9b5411db57 | ||
|
|
f5d4a9c4eb | ||
|
|
703d4baf8b | ||
|
|
bd6422f583 | ||
|
|
1e981115c9 | ||
|
|
6fba52b6da | ||
|
|
5cad2006eb | ||
|
|
65b9b0c429 | ||
|
|
0f8de48ddb | ||
|
|
cd0b651d43 | ||
|
|
79fa8b2f41 | ||
|
|
dd3f4f9b92 | ||
|
|
447e01427d | ||
|
|
b8776e8613 | ||
|
|
f6c21a1f20 | ||
|
|
5402458ff5 | ||
|
|
a25d570040 | ||
|
|
ea7b40687b | ||
|
|
b2991950a5 | ||
|
|
e906933f39 | ||
|
|
a59eb4868a | ||
|
|
a9d7d315a5 | ||
|
|
446019aefd | ||
|
|
6fa4f96ba3 | ||
|
|
dc6fc3e079 | ||
|
|
fdce38fa79 | ||
|
|
e8c903294f | ||
|
|
41673e8fed | ||
|
|
98d6e6e523 | ||
|
|
7e5d6af5c1 | ||
|
|
f1b95d78f9 | ||
|
|
d99c230f51 | ||
|
|
01930357f7 | ||
|
|
343c9f9baa | ||
|
|
1c029b97c0 | ||
|
|
38499e84fc | ||
|
|
6b84c4155c | ||
|
|
50f0484ad5 | ||
|
|
27d9740ad6 | ||
|
|
0a4a6a8399 | ||
|
|
81a4272444 | ||
|
|
3a0f5398a2 | ||
|
|
b7e0c12966 | ||
|
|
17c9b17a7e | ||
|
|
aab9bbbb93 | ||
|
|
de289ea336 | ||
|
|
81c43dca6a | ||
|
|
3f14a09e73 | ||
|
|
74571d531c | ||
|
|
2c7946f2bc | ||
|
|
8f6bfe5b32 | ||
|
|
474da6b28f | ||
|
|
be973e52bb | ||
|
|
a1693bfe48 | ||
|
|
6774457733 | ||
|
|
d169598c6c | ||
|
|
d2e9ce270a | ||
|
|
6e8da7d8c4 | ||
|
|
7a081244a5 | ||
|
|
0c87d5d6b3 | ||
|
|
d643360575 | ||
|
|
738d462955 | ||
|
|
82b82fd487 | ||
|
|
509447b4d5 | ||
|
|
e41a956782 | ||
|
|
2197856395 | ||
|
|
21cae35930 | ||
|
|
c75efedc6e | ||
|
|
4eafaab816 | ||
|
|
6b78b5c2be | ||
|
|
f9a19af7a8 | ||
|
|
bc28942101 | ||
|
|
44c0f811b1 | ||
|
|
6c24caf282 | ||
|
|
4adb8a81bf | ||
|
|
60b7299fe1 | ||
|
|
8f563a5f81 | ||
|
|
5c811b91f1 | ||
|
|
ba3c5e1a25 | ||
|
|
c46b4ea990 | ||
|
|
e717492019 | ||
|
|
bd252b2a09 | ||
|
|
50f647c866 | ||
|
|
7b6bd585c1 | ||
|
|
d563c21afe | ||
|
|
ee0f23fdc6 | ||
|
|
286025497f | ||
|
|
aeb4f87a27 | ||
|
|
6ecff31b7f | ||
|
|
bc238124ee | ||
|
|
4c232fe12b | ||
|
|
a820d688eb | ||
|
|
56843eb7ba | ||
|
|
93589e630c | ||
|
|
2477b09cb9 | ||
|
|
f860f323be | ||
|
|
71c1232e32 | ||
|
|
36c79113fb | ||
|
|
e1f98fbfc0 | ||
|
|
a73f43a7a2 | ||
|
|
eef408e5fb | ||
|
|
87e088990b | ||
|
|
a8522f391a | ||
|
|
2773038cf9 | ||
|
|
a791af30b4 | ||
|
|
1ed510c232 | ||
|
|
f194db9aa6 | ||
|
|
c39c36e6ad | ||
|
|
472d0045ba | ||
|
|
1407bbf94c | ||
|
|
8014637ad1 | ||
|
|
dfc49e7afe | ||
|
|
2819b555c8 | ||
|
|
4bd3b1b0ef | ||
|
|
e3450cac72 | ||
|
|
c3a610d32a | ||
|
|
739f8eefb7 | ||
|
|
25548f85c9 | ||
|
|
4bb41d065b | ||
|
|
5f4becb0f5 | ||
|
|
ed611119d9 | ||
|
|
6cc2d58d69 | ||
|
|
f620d74919 | ||
|
|
869f4c68d4 | ||
|
|
c34b41acd6 | ||
|
|
abce5c25bb | ||
|
|
43dbe02d5b | ||
|
|
edc81f3bc1 | ||
|
|
d362a07239 | ||
|
|
a9744f3937 | ||
|
|
0c9ab9427f | ||
|
|
05e916717b | ||
|
|
693bfe439b | ||
|
|
0d72767b3e | ||
|
|
56667af823 | ||
|
|
0a908ce8e2 | ||
|
|
b0f896558f | ||
|
|
425b9834a8 | ||
|
|
56671a88c6 | ||
|
|
5316f0fff2 | ||
|
|
1be73b903e | ||
|
|
d1e73ce954 | ||
|
|
543745a10e | ||
|
|
9ca00e4880 | ||
|
|
e385417047 | ||
|
|
6d2b5e3771 | ||
|
|
700977d73e | ||
|
|
79015b9d0a | ||
|
|
3716a2fbe8 | ||
|
|
737d43724f | ||
|
|
59c8343851 | ||
|
|
94c16b2c31 | ||
|
|
8f70525374 | ||
|
|
7adccde714 | ||
|
|
8d1e65f297 | ||
|
|
7b4e6cf705 | ||
|
|
a8136c578a | ||
|
|
b820bb3b1f | ||
|
|
b03bbe724d | ||
|
|
7da182472d | ||
|
|
42ea4fb751 | ||
|
|
2fdba9de19 | ||
|
|
a2808322c6 | ||
|
|
a29fcae409 | ||
|
|
3ebe28970a | ||
|
|
79d9fdc016 | ||
|
|
e310850353 | ||
|
|
8057782bb8 | ||
|
|
cb2d41e3a0 | ||
|
|
542a48a16a | ||
|
|
606098f45d | ||
|
|
d91067220f | ||
|
|
67b9f1936d | ||
|
|
bb9d87ad55 | ||
|
|
e7a60d8961 | ||
|
|
470197bd0b | ||
|
|
d3e7f9da67 | ||
|
|
97280bbcfc | ||
|
|
e9fde3e116 | ||
|
|
54bf5f20e9 | ||
|
|
2fa8ea0f74 | ||
|
|
a0ef5a194c | ||
|
|
04b11d78ff | ||
|
|
8173c370f6 | ||
|
|
b6550b35c3 | ||
|
|
b5128b1610 | ||
|
|
963efb1f09 | ||
|
|
d6005e59a5 | ||
|
|
e1b6a23049 | ||
|
|
be61091401 | ||
|
|
e4366688f7 | ||
|
|
5879eb0be3 | ||
|
|
f209be1142 | ||
|
|
625370a1ad | ||
|
|
2c82f25272 | ||
|
|
8fbf635dd3 | ||
|
|
c1a5a30285 | ||
|
|
3586767c05 | ||
|
|
5bab89fb22 | ||
|
|
ea19be1736 | ||
|
|
8b39570009 | ||
|
|
e29d6b5f41 | ||
|
|
25ccf7f908 | ||
|
|
3c27678963 | ||
|
|
0e90bcb539 | ||
|
|
804160e659 | ||
|
|
3948021b6c | ||
|
|
550475b5e1 | ||
|
|
d4ff1bbaec | ||
|
|
5666bd0e2d | ||
|
|
03db7b0dbb | ||
|
|
53603500ed | ||
|
|
97ea5ae403 |
29
.github/CONTRIBUTING.md
vendored
29
.github/CONTRIBUTING.md
vendored
@@ -14,8 +14,6 @@ Usually, all issues are tracked publicly on [Github](https://github.com/nlohmann
|
||||
|
||||
Please [create an issue](https://github.com/nlohmann/json/issues/new), assuming one does not already exist, and describe your concern. Note you need a [GitHub account](https://github.com/signup/free) for this.
|
||||
|
||||
If you want propose changes to the code, you need to download the [`re2c`](http://re2c.org) tool.
|
||||
|
||||
## Describe your issue
|
||||
|
||||
Clearly describe the issue:
|
||||
@@ -24,33 +22,28 @@ Clearly describe the issue:
|
||||
- If you propose a change or addition, try to give an **example** how the improved code could look like or how to use it.
|
||||
- If you found a compilation error, please tell us which **compiler** (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.
|
||||
|
||||
Please stick to the [issue template](https://github.com/nlohmann/json/blob/develop/.github/ISSUE_TEMPLATE.md) if possible.
|
||||
|
||||
## Files to change
|
||||
|
||||
There are currently two files which need to be edited:
|
||||
|
||||
1. [`src/json.hpp.re2c`](https://github.com/nlohmann/json/blob/master/src/json.hpp.re2c) (note the `.re2c` suffix) - This file contains a comment section which describes the JSON lexic. This section is translated by [`re2c`](http://re2c.org) into file [`src/json.hpp`](https://github.com/nlohmann/json/blob/master/src/json.hpp) which is plain "vanilla" C++11 code. (In fact, the generated lexer consists of some hundred lines of `goto`s, which is a hint you never want to edit this file...).
|
||||
1. [`src/json.hpp`](https://github.com/nlohmann/json/blob/master/src/json.hpp)
|
||||
|
||||
If you only edit file `src/json.hpp` (without the `.re2c` suffix), your changes will be overwritten as soon as the lexer is touched again. To generate the `src/json.hpp` file which is actually used during compilation of the tests and all other code, please execute
|
||||
|
||||
```sh
|
||||
make re2c
|
||||
```
|
||||
|
||||
To run [`re2c`](http://re2c.org) and generate/overwrite file `src/json.hpp` with your changes in file `src/json.hpp.re2c`.
|
||||
|
||||
|
||||
2. [`test/src/unit.cpp`](https://github.com/nlohmann/json/blob/master/test/unit.cpp) - This contains the [Catch](https://github.com/philsquared/Catch) unit tests which currently cover [100 %](https://coveralls.io/github/nlohmann/json) of the library's code.
|
||||
2. [`test/src/unit-*.cpp`](https://github.com/nlohmann/json/tree/develop/test/src) - These files contain the [Catch](https://github.com/philsquared/Catch) unit tests which currently cover [100 %](https://coveralls.io/github/nlohmann/json) of the library's code.
|
||||
|
||||
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
|
||||
|
||||
```sh
|
||||
make check
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ cmake ..
|
||||
$ cmake --build .
|
||||
$ ctest
|
||||
```
|
||||
|
||||
The test cases are also executed with several different compilers on [Travis](https://travis-ci.org/nlohmann/json) once you open a pull request.
|
||||
|
||||
Please understand that I cannot accept pull requests changing only file `src/json.hpp`.
|
||||
|
||||
|
||||
## Note
|
||||
|
||||
@@ -59,10 +52,12 @@ Please understand that I cannot accept pull requests changing only file `src/jso
|
||||
|
||||
## Please don't
|
||||
|
||||
- Only make changes to file `src/json.hpp` -- please read the paragraph above and understand why `src/json.hpp.re2c` exists.
|
||||
- The C++11 support varies between different **compilers** and versions. Please note the [list of supported compilers](https://github.com/nlohmann/json/blob/master/README.md#supported-compilers). Some compilers like GCC 4.8 (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](https://github.com/nlohmann/json/issues?utf8=✓&q=label%3A%22visual+studio%22+) for these kind of bugs). 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](http://json.org) conformance**. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.
|
||||
- We shall not extend the library to **support comments**. There is quite some [controversy](https://www.reddit.com/r/programming/comments/4v6chu/why_json_doesnt_support_comments_douglas_crockford/) around this topic, and there were quite some [issues](https://github.com/nlohmann/json/issues/376) on this. We believe that JSON is fine without comments.
|
||||
- We do not preserve the **insertion order of object elements**. The [JSON standard](https://tools.ietf.org/html/rfc7159.html) defines objects as "an unordered collection of zero or more name/value pairs". To this end, this library does not preserve insertion order of name/value pairs. (In fact, keys will be traversed in alphabetical order as `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`](https://github.com/Tessil/ordered-map) or [`nlohmann::fifo_map`](https://github.com/nlohmann/fifo_map).
|
||||
|
||||
- Please do not open pull requests that address **multiple issues**.
|
||||
|
||||
## Wanted
|
||||
|
||||
22
.github/ISSUE_TEMPLATE.md
vendored
Normal file
22
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
**Bug Report**
|
||||
|
||||
- What is the issue you have?
|
||||
|
||||
- Please describe the steps to reproduce the issue. Can you provide a small but working code example?
|
||||
|
||||
- What is the expected behavior?
|
||||
|
||||
- And what is the actual behavior instead?
|
||||
|
||||
- Which compiler and operating system are you using? Is it a [supported compiler](https://github.com/nlohmann/json#supported-compilers)?
|
||||
|
||||
- Did you use a released version of the library or the version from the `develop` branch?
|
||||
|
||||
- If you experience a compilation error: can you [compile and run the unit tests](https://github.com/nlohmann/json#execute-unit-tests)?
|
||||
|
||||
|
||||
**Feature Request**
|
||||
|
||||
- Describe the feature in as much detail as possible.
|
||||
|
||||
- Include sample usage where appropriate.
|
||||
42
.github/PULL_REQUEST_TEMPLATE.md
vendored
42
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,45 +1,15 @@
|
||||
[Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.]
|
||||
|
||||
## Files to change
|
||||
* * *
|
||||
|
||||
There are currently two files which need to be edited:
|
||||
## Pull request checklist
|
||||
|
||||
1. [`src/json.hpp.re2c`](https://github.com/nlohmann/json/blob/master/src/json.hpp.re2c) (note the `.re2c` suffix) - This file contains a comment section which describes the JSON lexic. This section is translated by [`re2c`](http://re2c.org) into file [`src/json.hpp`](https://github.com/nlohmann/json/blob/master/src/json.hpp) which is plain "vanilla" C++11 code. (In fact, the generated lexer consists of some hundred lines of `goto`s, which is a hint you never want to edit this file...).
|
||||
|
||||
If you only edit file `src/json.hpp` (without the `.re2c` suffix), your changes will be overwritten as soon as the lexer is touched again. To generate the `src/json.hpp` file which is actually used during compilation of the tests and all other code, please execute
|
||||
|
||||
```sh
|
||||
make re2c
|
||||
```
|
||||
|
||||
To run [`re2c`](http://re2c.org) and generate/overwrite file `src/json.hpp` with your changes in file `src/json.hpp.re2c`.
|
||||
|
||||
|
||||
2. [`test/src/unit.cpp`](https://github.com/nlohmann/json/blob/master/test/unit.cpp) - This contains the [Catch](https://github.com/philsquared/Catch) unit tests which currently cover [100 %](https://coveralls.io/github/nlohmann/json) of the library's code.
|
||||
|
||||
If you add or change a feature, please also add a unit test to this file. The unit tests can be compiled with
|
||||
|
||||
```sh
|
||||
make
|
||||
```
|
||||
|
||||
and can be executed with
|
||||
|
||||
```sh
|
||||
./json_unit
|
||||
```
|
||||
|
||||
The test cases are also executed with several different compilers on [Travis](https://travis-ci.org/nlohmann/json) once you open a pull request.
|
||||
|
||||
Please understand that I cannot accept pull requests changing only file `src/json.hpp`.
|
||||
|
||||
|
||||
## Note
|
||||
|
||||
- If you open a pull request, the code will be automatically tested with [Valgrind](http://valgrind.org)'s Memcheck tool to detect memory leaks. Please be aware that the execution with Valgrind _may_ in rare cases yield different behavior than running the code directly. This can result in failing unit tests which run successfully without Valgrind.
|
||||
- [ ] Changes are described in the pull request, or an [existing issue is referenced](https://github.com/nlohmann/json/issues).
|
||||
- [ ] The test suite [compiles and runs](https://github.com/nlohmann/json/blob/develop/README.md#execute-unit-tests) without error.
|
||||
- [ ] [Code coverage](https://coveralls.io/github/nlohmann/json) is 100%. Test cases can be added by editing the [test suite](https://github.com/nlohmann/json/tree/develop/test/src).
|
||||
|
||||
## Please don't
|
||||
|
||||
- Only make changes to file `src/json.hpp` -- please read the paragraph above and understand why `src/json.hpp.re2c` exists.
|
||||
- The C++11 support varies between different **compilers** and versions. Please note the [list of supported compilers](https://github.com/nlohmann/json/blob/master/README.md#supported-compilers). Some compilers like GCC 4.8 (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](https://github.com/nlohmann/json/issues?utf8=✓&q=label%3A%22visual+studio%22+) for these kind of bugs). 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](http://json.org) conformance**. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.
|
||||
|
||||
19
.github/config.yml
vendored
Normal file
19
.github/config.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# Configuration for sentiment-bot - https://github.com/behaviorbot/sentiment-bot
|
||||
|
||||
# *Required* toxicity threshold between 0 and .99 with the higher numbers being the most toxic
|
||||
# Anything higher than this threshold will be marked as toxic and commented on
|
||||
sentimentBotToxicityThreshold: .7
|
||||
|
||||
# *Required* Comment to reply with
|
||||
sentimentBotReplyComment: >
|
||||
Please be sure to review the [code of conduct](https://github.com/nlohmann/json/blob/develop/CODE_OF_CONDUCT.md) and be respectful of other users. cc/ @nlohmann
|
||||
|
||||
|
||||
# Configuration for request-info - https://github.com/behaviorbot/request-info
|
||||
|
||||
# *Required* Comment to reply with
|
||||
requestInfoReplyComment: >
|
||||
We would appreciate it if you could provide us with more info about this issue or pull request! Please check the [issue template](https://github.com/nlohmann/json/blob/develop/.github/ISSUE_TEMPLATE.md) and the [pull request template](https://github.com/nlohmann/json/blob/develop/.github/PULL_REQUEST_TEMPLATE.md).
|
||||
|
||||
# *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given
|
||||
requestInfoLabelToAdd: "state: needs more info"
|
||||
17
.github/stale.yml
vendored
Normal file
17
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 30
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
- security
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: "state: stale"
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
json_unit
|
||||
json_benchmarks
|
||||
json_benchmarks_simple
|
||||
fuzz-testing
|
||||
|
||||
*.dSYM
|
||||
@@ -7,10 +8,16 @@ fuzz-testing
|
||||
*.gcno
|
||||
*.gcda
|
||||
|
||||
working
|
||||
build
|
||||
build_coverage
|
||||
|
||||
doc/xml
|
||||
doc/html
|
||||
me.nlohmann.json.docset
|
||||
|
||||
benchmarks/files/numbers/*.json
|
||||
|
||||
.idea
|
||||
cmake-build-debug
|
||||
|
||||
test/test-*
|
||||
|
||||
291
.travis.yml
291
.travis.yml
@@ -7,6 +7,7 @@ language: cpp
|
||||
|
||||
dist: trusty
|
||||
sudo: required
|
||||
group: edge
|
||||
|
||||
|
||||
###################
|
||||
@@ -28,21 +29,28 @@ matrix:
|
||||
include:
|
||||
|
||||
# Valgrind
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env:
|
||||
- COMPILER=g++-4.9
|
||||
- SPECIAL=valgrind
|
||||
- CMAKE_OPTIONS=-DJSON_Valgrind=ON
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: [g++-4.9, valgrind]
|
||||
after_success:
|
||||
- valgrind --error-exitcode=1 --leak-check=full test/json_unit
|
||||
packages: ['g++-4.9', 'valgrind', 'ninja-build']
|
||||
|
||||
# clang sanitizer
|
||||
- os: linux
|
||||
compiler: clang
|
||||
env:
|
||||
- COMPILER=clang++-5.0
|
||||
- CMAKE_OPTIONS=-DJSON_Sanitizer=ON
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-5.0']
|
||||
packages: ['g++-6', 'clang-5.0', 'ninja-build']
|
||||
|
||||
# cppcheck
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env:
|
||||
@@ -51,10 +59,21 @@ matrix:
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: [g++-4.9, cppcheck]
|
||||
packages: ['g++-4.9', 'cppcheck', 'ninja-build']
|
||||
after_success:
|
||||
- make cppcheck
|
||||
|
||||
# no exceptions
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env:
|
||||
- COMPILER=g++-4.9
|
||||
- CMAKE_OPTIONS=-DJSON_NoExceptions=ON
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: ['g++-4.9', 'ninja-build']
|
||||
|
||||
# Coveralls (http://gronlier.fr/blog/2015/01/adding-code-coverage-to-your-c-project/)
|
||||
|
||||
- os: linux
|
||||
@@ -62,72 +81,65 @@ matrix:
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: ['g++-4.9', 'ruby']
|
||||
packages: ['g++-4.9', 'ninja-build']
|
||||
before_script:
|
||||
- wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz
|
||||
- tar xf lcov_1.11.orig.tar.gz
|
||||
- sudo make -C lcov-1.11/ install
|
||||
- gem install coveralls-lcov
|
||||
- pip install --user cpp-coveralls
|
||||
after_success:
|
||||
- make clean
|
||||
- CXXFLAGS="--coverage -g -O0" CPPFLAGS="-DNDEBUG" make
|
||||
- test/json_unit "*"
|
||||
- coveralls --build-root test --exclude src/catch.hpp --exclude src/unit-algorithms.cpp --exclude src/unit-allocator.cpp --exclude src/unit-capacity.cpp --exclude src/unit-class_const_iterator.cpp --exclude src/unit-class_iterator.cpp --exclude src/unit-class_lexer.cpp --exclude src/unit-class_parser.cpp --exclude src/unit-comparison.cpp --exclude src/unit-concepts.cpp --exclude src/unit-constructor1.cpp --exclude src/unit-constructor2.cpp --exclude src/unit-convenience.cpp --exclude src/unit-conversions.cpp --exclude src/unit-deserialization.cpp --exclude src/unit-element_access1.cpp --exclude src/unit-element_access2.cpp --exclude src/unit-inspection.cpp --exclude src/unit-iterator_wrapper.cpp --exclude src/unit-iterators1.cpp --exclude src/unit-iterators2.cpp --exclude src/unit-json_patch.cpp --exclude src/unit-json_pointer.cpp --exclude src/unit-modifiers.cpp --exclude src/unit-pointer_access.cpp --exclude src/unit-readme.cpp --exclude src/unit-reference_access.cpp --exclude src/unit-regression.cpp --exclude src/unit-serialization.cpp --exclude src/unit-testsuites.cpp --exclude src/unit-unicode.cpp --include ../src/json.hpp --gcov-options '\-lp' --gcov 'gcov-4.9'
|
||||
- lcov --directory src --directory test/src --capture --output-file coverage.info --rc lcov_branch_coverage=1 --no-external
|
||||
- lcov --remove coverage.info 'test/src/*' --output-file coverage.info --rc lcov_branch_coverage=1
|
||||
- lcov --list coverage.info --rc lcov_branch_coverage=1
|
||||
- coveralls-lcov --repo-token F9bs4Nop10JRgqPQXRcifyQKYhb3FczkS coverage.info
|
||||
- coveralls --build-root test --include src --gcov 'gcov-4.9' --gcov-options '\-lp'
|
||||
env:
|
||||
- COMPILER=g++-4.9
|
||||
- SPECIAL=coveralls
|
||||
- CMAKE_OPTIONS=-DJSON_Coverage=ON
|
||||
|
||||
# Coverity (only for branch coverity_scan)
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
compiler: clang
|
||||
before_install: echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: ['g++-5', 'valgrind']
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6']
|
||||
packages: ['g++-6', 'clang-3.6', 'ninja-build']
|
||||
coverity_scan:
|
||||
project:
|
||||
name: "nlohmann/json"
|
||||
description: "Build submitted via Travis CI"
|
||||
notification_email: niels.lohmann@gmail.com
|
||||
build_command_prepend: "make clean ; sudo cp $(which g++-5) $(which g++)"
|
||||
build_command: "make"
|
||||
build_command_prepend: "mkdir coverity_build ; cd coverity_build ; cmake .. ; cd .."
|
||||
build_command: "make -C coverity_build"
|
||||
branch_pattern: coverity_scan
|
||||
env:
|
||||
- COMPILER=g++-5
|
||||
- SPECIAL=coverity
|
||||
- COMPILER=clang++-3.6
|
||||
|
||||
# OSX / Clang
|
||||
|
||||
- os: osx
|
||||
osx_image: beta-xcode6.1
|
||||
|
||||
- os: osx
|
||||
osx_image: beta-xcode6.2
|
||||
|
||||
- os: osx
|
||||
osx_image: beta-xcode6.3
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode6.4
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode7.1
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode7.2
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode7.3
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode8
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode8.1
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode8.2
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode8.3
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9.1
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9.2
|
||||
|
||||
# Linux / GCC
|
||||
|
||||
- os: linux
|
||||
@@ -136,7 +148,7 @@ matrix:
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: g++-4.9
|
||||
packages: ['g++-4.9', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
@@ -144,7 +156,7 @@ matrix:
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: g++-5
|
||||
packages: ['g++-5', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
@@ -152,104 +164,119 @@ matrix:
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: g++-6
|
||||
packages: ['g++-6', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env: COMPILER=g++-7
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: ['g++-7', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env:
|
||||
- COMPILER=g++-7
|
||||
- CXXFLAGS=-std=c++17
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: ['g++-7', 'ninja-build']
|
||||
|
||||
# Linux / Clang
|
||||
|
||||
- os: linux
|
||||
env: LLVM_VERSION=3.6.0
|
||||
compiler: clang
|
||||
env: COMPILER=clang++-3.5
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.5']
|
||||
packages: ['g++-6', 'clang-3.5', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
env: LLVM_VERSION=3.6.1
|
||||
compiler: clang
|
||||
env: COMPILER=clang++-3.6
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6']
|
||||
packages: ['g++-6', 'clang-3.6', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
env: LLVM_VERSION=3.6.2
|
||||
compiler: clang
|
||||
env: COMPILER=clang++-3.7
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7']
|
||||
packages: ['g++-6', 'clang-3.7', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
env: LLVM_VERSION=3.7.0
|
||||
compiler: clang
|
||||
env: COMPILER=clang++-3.8
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: ['g++-6', 'clang-3.8', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
env: LLVM_VERSION=3.7.1
|
||||
compiler: clang
|
||||
env: COMPILER=clang++-3.9
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test']
|
||||
packages: ['g++-6', 'clang-3.9', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
env: LLVM_VERSION=3.8.0
|
||||
compiler: clang
|
||||
env: COMPILER=clang++-4.0
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-4.0']
|
||||
packages: ['g++-6', 'clang-4.0', 'ninja-build']
|
||||
|
||||
- os: linux
|
||||
env: LLVM_VERSION=3.8.1
|
||||
compiler: clang
|
||||
env: COMPILER=clang++-5.0
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-5.0']
|
||||
packages: ['g++-6', 'clang-5.0', 'ninja-build']
|
||||
|
||||
#####################
|
||||
# installation step #
|
||||
#####################
|
||||
|
||||
# set directories to cache
|
||||
cache:
|
||||
directories:
|
||||
- ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.2
|
||||
- ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.1
|
||||
- ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.0
|
||||
- ${TRAVIS_BUILD_DIR}/deps/llvm-3.7.0
|
||||
- ${TRAVIS_BUILD_DIR}/deps/llvm-3.7.1
|
||||
- ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.0
|
||||
- ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.1
|
||||
|
||||
|
||||
install:
|
||||
# create deps dir if not existing
|
||||
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
|
||||
- mkdir -p ${DEPS_DIR}
|
||||
|
||||
# make sure CXX is correctly set
|
||||
- if [[ "${COMPILER}" != "" ]]; then export CXX=${COMPILER}; fi
|
||||
|
||||
# install LLVM/clang when LLVM_VERSION is set
|
||||
- |
|
||||
if [[ "${LLVM_VERSION}" != "" ]]; then
|
||||
LLVM_DIR=${DEPS_DIR}/llvm-${LLVM_VERSION}
|
||||
if [[ -z "$(ls -A ${LLVM_DIR})" ]]; then
|
||||
travis_retry wget --quiet https://cmake.org/files/v3.6/cmake-3.6.1.tar.gz
|
||||
tar xfz cmake-3.6.1.tar.gz
|
||||
(cd cmake-3.6.1 && ./configure --prefix=${LLVM_DIR}/cmake && make install)
|
||||
export PATH="${LLVM_DIR}/cmake/bin:${PATH}"
|
||||
LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz"
|
||||
LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz"
|
||||
LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz"
|
||||
CLANG_URL="http://llvm.org/releases/${LLVM_VERSION}/clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-ubuntu-14.04.tar.xz"
|
||||
mkdir -p ${LLVM_DIR} ${LLVM_DIR}/build ${LLVM_DIR}/projects/libcxx ${LLVM_DIR}/projects/libcxxabi ${LLVM_DIR}/clang
|
||||
travis_retry wget --quiet -O - ${LLVM_URL} | tar --strip-components=1 -xJ -C ${LLVM_DIR}
|
||||
travis_retry wget --quiet -O - ${LIBCXX_URL} | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxx
|
||||
travis_retry wget --quiet -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxxabi
|
||||
travis_retry wget --quiet -O - ${CLANG_URL} | tar --strip-components=1 -xJ -C ${LLVM_DIR}/clang
|
||||
(cd ${LLVM_DIR}/build && cmake .. -DCMAKE_INSTALL_PREFIX=${LLVM_DIR}/install -DCMAKE_CXX_COMPILER=clang++)
|
||||
(cd ${LLVM_DIR}/build/projects/libcxx && make install -j2)
|
||||
(cd ${LLVM_DIR}/build/projects/libcxxabi && make install -j2)
|
||||
fi
|
||||
export CXXFLAGS="-nostdinc++ -isystem ${LLVM_DIR}/install/include/c++/v1"
|
||||
export LDFLAGS="-L ${LLVM_DIR}/install/lib -l c++ -l c++abi"
|
||||
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_DIR}/install/lib"
|
||||
export PATH="${LLVM_DIR}/clang/bin:${PATH}"
|
||||
fi
|
||||
- os: linux
|
||||
compiler: clang
|
||||
env:
|
||||
- COMPILER=clang++-5.0
|
||||
- CXXFLAGS=-std=c++1z
|
||||
addons:
|
||||
apt:
|
||||
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-5.0']
|
||||
packages: ['g++-6', 'clang-5.0', 'ninja-build']
|
||||
|
||||
################
|
||||
# build script #
|
||||
################
|
||||
|
||||
script:
|
||||
# get CMake and Ninja (only for systems with brew - macOS)
|
||||
- |
|
||||
if [[ (-x $(which brew)) ]]; then
|
||||
brew update
|
||||
brew install cmake ninja
|
||||
cmake --version
|
||||
fi
|
||||
|
||||
# make sure CXX is correctly set
|
||||
- if [[ "${COMPILER}" != "" ]]; then export CXX=${COMPILER}; fi
|
||||
|
||||
# show OS/compiler version
|
||||
- uname -a
|
||||
- $CXX --version
|
||||
|
||||
# compile
|
||||
- make
|
||||
|
||||
# execute unit tests
|
||||
- test/json_unit "*"
|
||||
# compile and execute unit tests
|
||||
- mkdir -p build && cd build
|
||||
- cmake .. ${CMAKE_OPTIONS} -GNinja && cmake --build . --config Release
|
||||
- ctest -C Release -V -j
|
||||
- cd ..
|
||||
|
||||
# check if homebrew works (only checks develop branch)
|
||||
- if [ `which brew` ]; then
|
||||
@@ -258,51 +285,3 @@ script:
|
||||
brew install nlohmann_json --HEAD ;
|
||||
brew test nlohmann_json ;
|
||||
fi
|
||||
|
||||
#language: cpp
|
||||
#
|
||||
#dist: trusty
|
||||
#sudo: required
|
||||
#
|
||||
#env:
|
||||
# global:
|
||||
# # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
|
||||
# # via the "travis encrypt" command using the project repo's public key
|
||||
# - secure: "m89SSgE+ASLO38rSKx7MTXK3n5NkP9bIx95jwY71YEiuFzib30PDJ/DifKnXxBjvy/AkCGztErQRk/8ZCvq+4HXozU2knEGnL/RUitvlwbhzfh2D4lmS3BvWBGS3N3NewoPBrRmdcvnT0xjOGXxtZaJ3P74TkB9GBnlz/HmKORA="
|
||||
#
|
||||
## from http://stackoverflow.com/a/32127147/266378
|
||||
#matrix:
|
||||
# include:
|
||||
# - os: linux
|
||||
# compiler: gcc
|
||||
# addons:
|
||||
# apt:
|
||||
# sources: ['ubuntu-toolchain-r-test']
|
||||
# packages: ['g++-4.9', 'valgrind', 'python-pip', 'python-yaml']
|
||||
# before_script:
|
||||
# - pip install --user git+git://github.com/eddyxu/cpp-coveralls.git
|
||||
# after_success:
|
||||
# - make clean
|
||||
# - touch src/json.hpp
|
||||
# - make json_unit CXXFLAGS="-fprofile-arcs -ftest-coverage -std=c++11 -lstdc++" CXX=$COMPILER
|
||||
# - test/json_unit "*"
|
||||
# - coveralls --build-root test --exclude src/catch.hpp --exclude src/unit-algorithms.cpp --exclude src/unit-allocator.cpp --exclude src/unit-capacity.cpp --exclude src/unit-class_const_iterator.cpp --exclude src/unit-class_iterator.cpp --exclude src/unit-class_lexer.cpp --exclude src/unit-class_parser.cpp --exclude src/unit-comparison.cpp --exclude src/unit-concepts.cpp --exclude src/unit-constructor1.cpp --exclude src/unit-constructor2.cpp --exclude src/unit-convenience.cpp --exclude src/unit-conversions.cpp --exclude src/unit-deserialization.cpp --exclude src/unit-element_access1.cpp --exclude src/unit-element_access2.cpp --exclude src/unit-inspection.cpp --exclude src/unit-iterator_wrapper.cpp --exclude src/unit-iterators1.cpp --exclude src/unit-iterators2.cpp --exclude src/unit-json_patch.cpp --exclude src/unit-json_pointer.cpp --exclude src/unit-modifiers.cpp --exclude src/unit-pointer_access.cpp --exclude src/unit-readme.cpp --exclude src/unit-reference_access.cpp --exclude src/unit-regression.cpp --exclude src/unit-serialization.cpp --exclude src/unit-testsuites.cpp --exclude src/unit-unicode.cpp --include ../src/json.hpp --gcov-options '\-lp' --gcov 'gcov-4.9'
|
||||
# env: COMPILER=g++-4.9
|
||||
#
|
||||
# - os: linux
|
||||
# compiler: gcc
|
||||
# before_install: echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
|
||||
# addons:
|
||||
# apt:
|
||||
# sources: ['ubuntu-toolchain-r-test']
|
||||
# packages: ['g++-5', 'valgrind']
|
||||
# coverity_scan:
|
||||
# project:
|
||||
# name: "nlohmann/json"
|
||||
# description: "Build submitted via Travis CI"
|
||||
# notification_email: niels.lohmann@gmail.com
|
||||
# build_command_prepend: "make clean ; sudo cp $(which g++-5) $(which g++)"
|
||||
# build_command: "make"
|
||||
# branch_pattern: coverity_scan
|
||||
# env: COMPILER=g++-5
|
||||
#
|
||||
|
||||
134
CMakeLists.txt
134
CMakeLists.txt
@@ -1,54 +1,100 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
|
||||
# define the project
|
||||
project(nlohmann_json VERSION 2.0.5 LANGUAGES CXX)
|
||||
##
|
||||
## PROJECT
|
||||
## name and version
|
||||
##
|
||||
project(nlohmann_json VERSION 3.0.1 LANGUAGES CXX)
|
||||
|
||||
enable_testing()
|
||||
##
|
||||
## OPTIONS
|
||||
##
|
||||
option(JSON_BuildTests "Build the unit tests when BUILD_TESTING is enabled." ON)
|
||||
|
||||
option(BuildTests "Build the unit tests" ON)
|
||||
##
|
||||
## CONFIGURATION
|
||||
##
|
||||
set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME})
|
||||
set(NLOHMANN_JSON_SOURCE_DIR "src/")
|
||||
set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
|
||||
set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR "include")
|
||||
set(NLOHMANN_JSON_HEADER_INSTALL_DIR "${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}/nlohmann")
|
||||
set(NLOHMANN_JSON_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
|
||||
set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in")
|
||||
set(NLOHMANN_JSON_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmake_config")
|
||||
set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
|
||||
set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake")
|
||||
|
||||
# define project variables
|
||||
set(JSON_TARGET_NAME ${PROJECT_NAME})
|
||||
set(JSON_PACKAGE_NAME ${JSON_TARGET_NAME})
|
||||
set(JSON_TARGETS_FILENAME "${JSON_PACKAGE_NAME}Targets.cmake")
|
||||
set(JSON_CONFIG_FILENAME "${JSON_PACKAGE_NAME}Config.cmake")
|
||||
set(JSON_CONFIGVERSION_FILENAME "${JSON_PACKAGE_NAME}ConfigVersion.cmake")
|
||||
set(JSON_CONFIG_DESTINATION "cmake")
|
||||
set(JSON_INCLUDE_DESTINATION "include/nlohmann")
|
||||
##
|
||||
## TARGET
|
||||
## create target and add include path
|
||||
##
|
||||
add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE)
|
||||
|
||||
# create and configure the library target
|
||||
add_library(${JSON_TARGET_NAME} INTERFACE)
|
||||
target_include_directories(${JSON_TARGET_NAME} INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
||||
$<INSTALL_INTERFACE:${JSON_INCLUDE_DESTINATION}>)
|
||||
target_include_directories(
|
||||
${NLOHMANN_JSON_TARGET_NAME}
|
||||
INTERFACE
|
||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
|
||||
# create and configure the unit test target
|
||||
if (BuildTests)
|
||||
## add debug view defintion file for msvc (natvis) [cmake <= 3.2.2 does not support export of source files]
|
||||
if (MSVC AND CMAKE_VERSION VERSION_GREATER "3.2.2")
|
||||
set(NLOHMANN_ADD_NATVIS TRUE)
|
||||
set(NLOHMANN_NATVIS_FILE "nlohmann_json.natvis")
|
||||
target_sources(
|
||||
${NLOHMANN_JSON_TARGET_NAME}
|
||||
INTERFACE
|
||||
$<INSTALL_INTERFACE:${NLOHMANN_NATVIS_FILE}>
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${NLOHMANN_NATVIS_FILE}>
|
||||
)
|
||||
endif()
|
||||
|
||||
##
|
||||
## TESTS
|
||||
## create and configure the unit test target
|
||||
##
|
||||
include(CTest) #adds option BUILD_TESTING (default ON)
|
||||
|
||||
if(BUILD_TESTING AND JSON_BuildTests)
|
||||
enable_testing()
|
||||
include_directories(${NLOHMANN_JSON_SOURCE_DIR})
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
||||
# generate a config and config version file for the package
|
||||
##
|
||||
## INSTALL
|
||||
## install header files, generate and install cmake config files for find_package()
|
||||
##
|
||||
include(CMakePackageConfigHelpers)
|
||||
configure_package_config_file("cmake/config.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIG_FILENAME}"
|
||||
INSTALL_DESTINATION ${JSON_CONFIG_DESTINATION})
|
||||
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}"
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY SameMajorVersion)
|
||||
|
||||
# export the library target and store build directory in package registry
|
||||
export(TARGETS ${JSON_TARGET_NAME}
|
||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/${JSON_TARGETS_FILENAME}")
|
||||
export(PACKAGE ${JSON_PACKAGE_NAME})
|
||||
|
||||
# install library target and config files
|
||||
install(TARGETS ${JSON_TARGET_NAME}
|
||||
EXPORT ${JSON_PACKAGE_NAME})
|
||||
install(FILES "src/json.hpp"
|
||||
DESTINATION ${JSON_INCLUDE_DESTINATION})
|
||||
install(EXPORT ${JSON_PACKAGE_NAME}
|
||||
FILE ${JSON_TARGETS_FILENAME}
|
||||
DESTINATION ${JSON_CONFIG_DESTINATION})
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIG_FILENAME}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}"
|
||||
DESTINATION ${JSON_CONFIG_DESTINATION})
|
||||
write_basic_package_version_file(
|
||||
${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion
|
||||
)
|
||||
configure_package_config_file(
|
||||
${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE}
|
||||
${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE}
|
||||
INSTALL_DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
|
||||
)
|
||||
install(
|
||||
DIRECTORY ${NLOHMANN_JSON_SOURCE_DIR}
|
||||
DESTINATION ${NLOHMANN_JSON_HEADER_INSTALL_DIR}
|
||||
)
|
||||
install(
|
||||
FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE}
|
||||
DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
|
||||
)
|
||||
if (NLOHMANN_ADD_NATVIS)
|
||||
install(
|
||||
FILES ${NLOHMANN_NATVIS_FILE}
|
||||
DESTINATION .
|
||||
)
|
||||
endif()
|
||||
install(
|
||||
TARGETS ${NLOHMANN_JSON_TARGET_NAME}
|
||||
EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
|
||||
INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}
|
||||
)
|
||||
install(
|
||||
EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
|
||||
DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
|
||||
)
|
||||
|
||||
46
CODE_OF_CONDUCT.md
Normal file
46
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at mail@nlohmann.me. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
826
ChangeLog.md
826
ChangeLog.md
@@ -1,38 +1,647 @@
|
||||
# Change Log
|
||||
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [v3.0.1](https://github.com/nlohmann/json/releases/tag/v3.0.1) (2017-12-29)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v3.0.0...v3.0.1)
|
||||
|
||||
- Problem parsing array to global vector [\#896](https://github.com/nlohmann/json/issues/896)
|
||||
- Invalid RFC6902 copy operation succeeds [\#894](https://github.com/nlohmann/json/issues/894)
|
||||
- How to rename a key during looping? [\#893](https://github.com/nlohmann/json/issues/893)
|
||||
- clang++-6.0 \(6.0.0-svn321357-1\) warning [\#892](https://github.com/nlohmann/json/issues/892)
|
||||
- Make json.hpp aware of the modules TS? [\#891](https://github.com/nlohmann/json/issues/891)
|
||||
- All enum values not handled in switch cases. \( -Wswitch-enum \) [\#889](https://github.com/nlohmann/json/issues/889)
|
||||
- JSON Pointer resolve failure resulting in incorrect exception code [\#888](https://github.com/nlohmann/json/issues/888)
|
||||
- Unexpected nested arrays from std::vector [\#886](https://github.com/nlohmann/json/issues/886)
|
||||
- erase multiple elements from a json object [\#884](https://github.com/nlohmann/json/issues/884)
|
||||
- Container function overview in Doxygen is not updated [\#883](https://github.com/nlohmann/json/issues/883)
|
||||
- How to use this for binary file uploads [\#881](https://github.com/nlohmann/json/issues/881)
|
||||
- Allow setting JSON\_BuildTests=OFF from parent CMakeLists.txt [\#846](https://github.com/nlohmann/json/issues/846)
|
||||
- Unit test fails for local-independent str-to-num [\#845](https://github.com/nlohmann/json/issues/845)
|
||||
- Another idea about type support [\#774](https://github.com/nlohmann/json/issues/774)
|
||||
|
||||
- Includes CTest module/adds BUILD\_TESTING option [\#885](https://github.com/nlohmann/json/pull/885) ([TinyTinni](https://github.com/TinyTinni))
|
||||
- Fix MSVC warning C4819 [\#882](https://github.com/nlohmann/json/pull/882) ([erengy](https://github.com/erengy))
|
||||
- Merge branch 'develop' into coverity\_scan [\#880](https://github.com/nlohmann/json/pull/880) ([nlohmann](https://github.com/nlohmann))
|
||||
- :wrench: Fix up a few more effc++ items [\#858](https://github.com/nlohmann/json/pull/858) ([mattismyname](https://github.com/mattismyname))
|
||||
|
||||
## [v3.0.0](https://github.com/nlohmann/json/releases/tag/v3.0.0) (2017-12-17)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.1.1...v3.0.0)
|
||||
|
||||
- unicode strings [\#878](https://github.com/nlohmann/json/issues/878)
|
||||
- Visual Studio 2017 15.5 C++17 std::allocator deprecations [\#872](https://github.com/nlohmann/json/issues/872)
|
||||
- Typo "excpetion" [\#869](https://github.com/nlohmann/json/issues/869)
|
||||
- Explicit array example in README.md incorrect [\#867](https://github.com/nlohmann/json/issues/867)
|
||||
- why don't you release this from Feb. ? [\#865](https://github.com/nlohmann/json/issues/865)
|
||||
- json::parse throws std::invalid\_argument when processing string generated by json::dump\(\) [\#863](https://github.com/nlohmann/json/issues/863)
|
||||
- code analysis: potential bug? [\#859](https://github.com/nlohmann/json/issues/859)
|
||||
- MSVC2017, 15.5 new issues. [\#857](https://github.com/nlohmann/json/issues/857)
|
||||
- very basic: fetching string value/content without quotes [\#853](https://github.com/nlohmann/json/issues/853)
|
||||
- Ambiguous function call to get with pointer type and constant json object in VS2015 \(15.4.4\) [\#852](https://github.com/nlohmann/json/issues/852)
|
||||
- How to put object in the array as a member? [\#850](https://github.com/nlohmann/json/issues/850)
|
||||
- misclick, please ignore [\#849](https://github.com/nlohmann/json/issues/849)
|
||||
- Make XML great again. [\#847](https://github.com/nlohmann/json/issues/847)
|
||||
- Converting to array not working [\#843](https://github.com/nlohmann/json/issues/843)
|
||||
- Iteration weirdness [\#842](https://github.com/nlohmann/json/issues/842)
|
||||
- Use reference or pointer as Object value [\#841](https://github.com/nlohmann/json/issues/841)
|
||||
- Ambiguity in parsing nested maps [\#840](https://github.com/nlohmann/json/issues/840)
|
||||
- could not find from\_json\(\) method in T's namespace [\#839](https://github.com/nlohmann/json/issues/839)
|
||||
- Incorrect parse error with binary data in keys? [\#838](https://github.com/nlohmann/json/issues/838)
|
||||
- using dump\(\) when std::wstring is StringType with VS2017 [\#836](https://github.com/nlohmann/json/issues/836)
|
||||
- Show the path of the currently parsed value when an error occurs [\#835](https://github.com/nlohmann/json/issues/835)
|
||||
- Repetitive data type while reading [\#833](https://github.com/nlohmann/json/issues/833)
|
||||
- Stack-overflow \(OSS-Fuzz 4234\) [\#832](https://github.com/nlohmann/json/issues/832)
|
||||
- Storing multiple types inside map [\#831](https://github.com/nlohmann/json/issues/831)
|
||||
- Application terminating [\#830](https://github.com/nlohmann/json/issues/830)
|
||||
- Missing CMake hunter package? [\#828](https://github.com/nlohmann/json/issues/828)
|
||||
- std::map\<std::string, std::string\> from json object yields C2665: 'std::pair\<const \_Kty,\_Ty\>::pair': none of the 2 overloads could convert all the argument types [\#827](https://github.com/nlohmann/json/issues/827)
|
||||
- object.dump gives quoted string, want to use .dump\(\) to generate javascripts. [\#826](https://github.com/nlohmann/json/issues/826)
|
||||
- Assertion failed on \["NoExistKey"\] of an not existing key of const json& [\#825](https://github.com/nlohmann/json/issues/825)
|
||||
- vs2015 error : static member will remain uninitialized at runtime but use in constant-expressions is supported [\#824](https://github.com/nlohmann/json/issues/824)
|
||||
- Code Checking Warnings from json.hpp on VS2017 Community [\#821](https://github.com/nlohmann/json/issues/821)
|
||||
- Missing iostream in try online [\#820](https://github.com/nlohmann/json/issues/820)
|
||||
- Floating point value loses decimal point during dump [\#818](https://github.com/nlohmann/json/issues/818)
|
||||
- Conan package for the library [\#817](https://github.com/nlohmann/json/issues/817)
|
||||
- stream error [\#815](https://github.com/nlohmann/json/issues/815)
|
||||
- Link error when using find\(\) on the latest commit [\#814](https://github.com/nlohmann/json/issues/814)
|
||||
- ABI issue with json object between 2 shared libraries [\#813](https://github.com/nlohmann/json/issues/813)
|
||||
- scan\_string\(\) return token\_type::parse\_error; when parse ansi file [\#812](https://github.com/nlohmann/json/issues/812)
|
||||
- segfault when using fifo\_map with json [\#810](https://github.com/nlohmann/json/issues/810)
|
||||
- This shit is shit [\#809](https://github.com/nlohmann/json/issues/809)
|
||||
- \_finite and \_isnan are no members of "std" [\#808](https://github.com/nlohmann/json/issues/808)
|
||||
- how to print out the line which causing exception? [\#806](https://github.com/nlohmann/json/issues/806)
|
||||
- {} uses copy constructor, while = does not [\#805](https://github.com/nlohmann/json/issues/805)
|
||||
- json.hpp:8955: multiple definition of function that is not defined twice or more. [\#804](https://github.com/nlohmann/json/issues/804)
|
||||
- \[question\] to\_json for base and derived class [\#803](https://github.com/nlohmann/json/issues/803)
|
||||
- Misleading error message - unexpected '"' - on incorrect utf-8 symbol [\#802](https://github.com/nlohmann/json/issues/802)
|
||||
- json data = std::string\_view\("hi"\); doesn't work? [\#801](https://github.com/nlohmann/json/issues/801)
|
||||
- Thread safety of parse\(\) [\#800](https://github.com/nlohmann/json/issues/800)
|
||||
- Numbers as strings [\#799](https://github.com/nlohmann/json/issues/799)
|
||||
- Tests failing on arm [\#797](https://github.com/nlohmann/json/issues/797)
|
||||
- Using your library \(without modification\) in another library [\#796](https://github.com/nlohmann/json/issues/796)
|
||||
- Iterating over sub-object [\#794](https://github.com/nlohmann/json/issues/794)
|
||||
- how to get the json object again from which printed by the method of dump\(\) [\#792](https://github.com/nlohmann/json/issues/792)
|
||||
- ppa to include source [\#791](https://github.com/nlohmann/json/issues/791)
|
||||
- Different include paths in macOS and Ubuntu [\#790](https://github.com/nlohmann/json/issues/790)
|
||||
- Missing break after line 12886 in switch/case [\#789](https://github.com/nlohmann/json/issues/789)
|
||||
- All unit tests fail? [\#787](https://github.com/nlohmann/json/issues/787)
|
||||
- More use of move semantics in deserialization [\#786](https://github.com/nlohmann/json/issues/786)
|
||||
- warning C4706 - Visual Studio 2017 \(/W4\) [\#784](https://github.com/nlohmann/json/issues/784)
|
||||
- Compile error in clang 5.0 [\#782](https://github.com/nlohmann/json/issues/782)
|
||||
- Error Installing appium\_lib with Ruby v2.4.2 Due to JSON [\#781](https://github.com/nlohmann/json/issues/781)
|
||||
- ::get\<int\>\(\) fails in new\(er\) release \[MSVC\] [\#780](https://github.com/nlohmann/json/issues/780)
|
||||
- Type Conversion [\#779](https://github.com/nlohmann/json/issues/779)
|
||||
- Segfault on nested parsing [\#778](https://github.com/nlohmann/json/issues/778)
|
||||
- Build warnings: shadowing exception id [\#776](https://github.com/nlohmann/json/issues/776)
|
||||
- multi-level JSON support. [\#775](https://github.com/nlohmann/json/issues/775)
|
||||
- SIGABRT on dump\(\) [\#773](https://github.com/nlohmann/json/issues/773)
|
||||
- \[Question\] Custom StringType template parameter \(possibility for a KeyType template parameter\) [\#772](https://github.com/nlohmann/json/issues/772)
|
||||
- constexpr ALL the Things! [\#771](https://github.com/nlohmann/json/issues/771)
|
||||
- error: ‘BasicJsonType’ in namespace ‘::’ does not name a type [\#770](https://github.com/nlohmann/json/issues/770)
|
||||
- Program calls abort function [\#769](https://github.com/nlohmann/json/issues/769)
|
||||
- \[Question\] Floating point resolution config during dump\(\) ? [\#768](https://github.com/nlohmann/json/issues/768)
|
||||
- make check - no test ran [\#767](https://github.com/nlohmann/json/issues/767)
|
||||
- The library cannot work properly with custom allocator based containers [\#766](https://github.com/nlohmann/json/issues/766)
|
||||
- Documentation or feature request. [\#763](https://github.com/nlohmann/json/issues/763)
|
||||
- warnings in msvc about mix/max macro while windows.h is used in the project [\#762](https://github.com/nlohmann/json/issues/762)
|
||||
- std::signbit ambiguous [\#761](https://github.com/nlohmann/json/issues/761)
|
||||
- How to use value for std::experimental::optional type? [\#760](https://github.com/nlohmann/json/issues/760)
|
||||
- Cannot load json file properly [\#759](https://github.com/nlohmann/json/issues/759)
|
||||
- Compilation error with unordered\_map\< int, int \> [\#758](https://github.com/nlohmann/json/issues/758)
|
||||
- CBOR string [\#757](https://github.com/nlohmann/json/issues/757)
|
||||
- Proposal: out\_of\_range should be a subclass of std::out\_of\_range [\#756](https://github.com/nlohmann/json/issues/756)
|
||||
- Compiling with icpc [\#755](https://github.com/nlohmann/json/issues/755)
|
||||
- Getter is setting the value to null if the key does not exist [\#754](https://github.com/nlohmann/json/issues/754)
|
||||
- parsing works sometimes and crashes others [\#752](https://github.com/nlohmann/json/issues/752)
|
||||
- Static\_assert failed "incompatible pointer type" with Xcode [\#751](https://github.com/nlohmann/json/issues/751)
|
||||
- user-defined literal operator not found [\#750](https://github.com/nlohmann/json/issues/750)
|
||||
- getting clean string from it.key\(\) [\#748](https://github.com/nlohmann/json/issues/748)
|
||||
- Best method for exploring and obtaining values of nested json objects when the names are not known beforehand? [\#747](https://github.com/nlohmann/json/issues/747)
|
||||
- null char at the end of string [\#746](https://github.com/nlohmann/json/issues/746)
|
||||
- Incorrect sample for operator \>\> in docs [\#745](https://github.com/nlohmann/json/issues/745)
|
||||
- User-friendly documentation [\#744](https://github.com/nlohmann/json/issues/744)
|
||||
- Retrieve all values that match a json path [\#743](https://github.com/nlohmann/json/issues/743)
|
||||
- Compilation issue with gcc 7.2 [\#742](https://github.com/nlohmann/json/issues/742)
|
||||
- CMake target nlohmann\_json does not have src into its interface includes [\#741](https://github.com/nlohmann/json/issues/741)
|
||||
- Error when serializing empty json: type must be string, but is object [\#740](https://github.com/nlohmann/json/issues/740)
|
||||
- Conversion error for std::map\<int, std::string\> [\#739](https://github.com/nlohmann/json/issues/739)
|
||||
- Dumping Json to file as array [\#738](https://github.com/nlohmann/json/issues/738)
|
||||
- nesting json objects [\#737](https://github.com/nlohmann/json/issues/737)
|
||||
- where to find general help? [\#736](https://github.com/nlohmann/json/issues/736)
|
||||
- Compilation Error on Clang 5.0 Upgrade [\#735](https://github.com/nlohmann/json/issues/735)
|
||||
- Compilation error with std::map\<std::string, std::string\> on vs 2015 [\#734](https://github.com/nlohmann/json/issues/734)
|
||||
- Benchmarks for Binary formats [\#733](https://github.com/nlohmann/json/issues/733)
|
||||
- Move test blobs to a submodule? [\#732](https://github.com/nlohmann/json/issues/732)
|
||||
- Support \n symbols in json string. [\#731](https://github.com/nlohmann/json/issues/731)
|
||||
- Project's name is too generic and hard to search for [\#730](https://github.com/nlohmann/json/issues/730)
|
||||
- Visual Studio 2015 IntelliTrace problems [\#729](https://github.com/nlohmann/json/issues/729)
|
||||
- How to erase nested objects inside other objects? [\#728](https://github.com/nlohmann/json/issues/728)
|
||||
- How to prevent alphabetical sorting of data? [\#727](https://github.com/nlohmann/json/issues/727)
|
||||
- Serialization for CBOR [\#726](https://github.com/nlohmann/json/issues/726)
|
||||
- Using json Object as value in a map [\#725](https://github.com/nlohmann/json/issues/725)
|
||||
- std::regex and nlohmann::json value [\#724](https://github.com/nlohmann/json/issues/724)
|
||||
- Warnings when compiling with VisualStudio 2015 [\#723](https://github.com/nlohmann/json/issues/723)
|
||||
- Has this lib the unicode \(wstring\) support? [\#722](https://github.com/nlohmann/json/issues/722)
|
||||
- When will be 3.0 in master? [\#721](https://github.com/nlohmann/json/issues/721)
|
||||
- Determine the type from error message. [\#720](https://github.com/nlohmann/json/issues/720)
|
||||
- Compile-Error C2100 \(MS VS2015\) in line 887 json.hpp [\#719](https://github.com/nlohmann/json/issues/719)
|
||||
- from\_json not working for boost::optional example [\#718](https://github.com/nlohmann/json/issues/718)
|
||||
- about from\_json and to\_json function [\#717](https://github.com/nlohmann/json/issues/717)
|
||||
- How to deserialize array with derived objects [\#716](https://github.com/nlohmann/json/issues/716)
|
||||
- How to detect parse failure? [\#715](https://github.com/nlohmann/json/issues/715)
|
||||
- Parse throw std::ios\_base::failure exception when failbit set to true [\#714](https://github.com/nlohmann/json/issues/714)
|
||||
- Is there a way of format just making a pretty print without changing the key's orders ? [\#713](https://github.com/nlohmann/json/issues/713)
|
||||
- Serialization of array of not same model items [\#712](https://github.com/nlohmann/json/issues/712)
|
||||
- pointer to json parse vector [\#711](https://github.com/nlohmann/json/issues/711)
|
||||
- Gtest SEH Exception [\#709](https://github.com/nlohmann/json/issues/709)
|
||||
- broken from\_json implementation for pair and tuple [\#707](https://github.com/nlohmann/json/issues/707)
|
||||
- Unevaluated lambda in assert breaks gcc 7 build [\#705](https://github.com/nlohmann/json/issues/705)
|
||||
- Issues when adding values to firebase database [\#704](https://github.com/nlohmann/json/issues/704)
|
||||
- Floating point equality - revisited [\#703](https://github.com/nlohmann/json/issues/703)
|
||||
- Conversion from valarray\<double\> to json fails to build [\#702](https://github.com/nlohmann/json/issues/702)
|
||||
- internal compiler error \(gcc7\) [\#701](https://github.com/nlohmann/json/issues/701)
|
||||
- One build system to rule them all [\#698](https://github.com/nlohmann/json/issues/698)
|
||||
- Generated nlohmann\_jsonConfig.cmake does not set JSON\_INCLUDE\_DIR [\#695](https://github.com/nlohmann/json/issues/695)
|
||||
- support the Chinese language in json string [\#694](https://github.com/nlohmann/json/issues/694)
|
||||
- NaN problem within develop branch [\#693](https://github.com/nlohmann/json/issues/693)
|
||||
- Please post example of specialization for boost::filesystem [\#692](https://github.com/nlohmann/json/issues/692)
|
||||
- Impossible to do an array of composite objects [\#691](https://github.com/nlohmann/json/issues/691)
|
||||
- How to save json to file? [\#690](https://github.com/nlohmann/json/issues/690)
|
||||
- my simple json parser [\#689](https://github.com/nlohmann/json/issues/689)
|
||||
- problem with new struct parsing syntax [\#688](https://github.com/nlohmann/json/issues/688)
|
||||
- Parse error while parse the json string contains UTF 8 encoded document bytes string [\#684](https://github.com/nlohmann/json/issues/684)
|
||||
- \[question\] how to get a string value by pointer [\#683](https://github.com/nlohmann/json/issues/683)
|
||||
- create json object from string variable [\#681](https://github.com/nlohmann/json/issues/681)
|
||||
- adl\_serializer and CRTP [\#680](https://github.com/nlohmann/json/issues/680)
|
||||
- Is there a way to control the precision of serialized floating point numbers? [\#677](https://github.com/nlohmann/json/issues/677)
|
||||
- Is there a way to get the path of a value? [\#676](https://github.com/nlohmann/json/issues/676)
|
||||
- Could the parser locate errors to line? [\#675](https://github.com/nlohmann/json/issues/675)
|
||||
- There is performance inefficiency found by coverity tool json2.1.1/include/nlohmann/json.hpp [\#673](https://github.com/nlohmann/json/issues/673)
|
||||
- include problem, when cmake on osx [\#672](https://github.com/nlohmann/json/issues/672)
|
||||
- Operator= ambiguous in C++1z and GCC 7.1.1 [\#670](https://github.com/nlohmann/json/issues/670)
|
||||
- should't the cmake install target be to nlohman/json.hpp [\#668](https://github.com/nlohmann/json/issues/668)
|
||||
- deserialise from `std::vector` [\#667](https://github.com/nlohmann/json/issues/667)
|
||||
- How to iterate? [\#665](https://github.com/nlohmann/json/issues/665)
|
||||
- could this json lib work on windows? [\#664](https://github.com/nlohmann/json/issues/664)
|
||||
- How does from\_json work? [\#662](https://github.com/nlohmann/json/issues/662)
|
||||
- insert\(or merge\) object should replace same key , not ignore [\#661](https://github.com/nlohmann/json/issues/661)
|
||||
- Why is an object ordering values by Alphabetical Order? [\#660](https://github.com/nlohmann/json/issues/660)
|
||||
- Parse method doesn't handle newlines. [\#659](https://github.com/nlohmann/json/issues/659)
|
||||
- Compilation "note" on GCC 6 ARM [\#658](https://github.com/nlohmann/json/issues/658)
|
||||
- Adding additional push\_back/operator+= rvalue overloads for JSON object [\#657](https://github.com/nlohmann/json/issues/657)
|
||||
- dump's parameter "ensure\_ascii" creates too long sequences [\#656](https://github.com/nlohmann/json/issues/656)
|
||||
- Question: parsing `void \*` [\#655](https://github.com/nlohmann/json/issues/655)
|
||||
- how should I check a string is valid JSON string ? [\#653](https://github.com/nlohmann/json/issues/653)
|
||||
- Question: thread safety of read only accesses [\#651](https://github.com/nlohmann/json/issues/651)
|
||||
- Eclipse: Method 'size' could not be resolved [\#649](https://github.com/nlohmann/json/issues/649)
|
||||
- Update/Add object fields [\#648](https://github.com/nlohmann/json/issues/648)
|
||||
- No exception raised for Out Of Range input of numbers [\#647](https://github.com/nlohmann/json/issues/647)
|
||||
- Package Name [\#646](https://github.com/nlohmann/json/issues/646)
|
||||
- What is the meaning of operator\[\]\(T\* key\) [\#645](https://github.com/nlohmann/json/issues/645)
|
||||
- Which is the correct way to json objects as parameters to functions? [\#644](https://github.com/nlohmann/json/issues/644)
|
||||
- Method to get string representations of values [\#642](https://github.com/nlohmann/json/issues/642)
|
||||
- CBOR serialization of a given JSON value does not serialize [\#641](https://github.com/nlohmann/json/issues/641)
|
||||
- Are we forced to use "-fexceptions" flag in android ndk project [\#640](https://github.com/nlohmann/json/issues/640)
|
||||
- Comparison of objects containing floats [\#639](https://github.com/nlohmann/json/issues/639)
|
||||
- 'localeconv' is not supported by NDK for SDK \<=20 [\#638](https://github.com/nlohmann/json/issues/638)
|
||||
- \[Question\] cLion integration [\#637](https://github.com/nlohmann/json/issues/637)
|
||||
- How to construct an iteratable usage in nlohmann json? [\#636](https://github.com/nlohmann/json/issues/636)
|
||||
- \[Question\] copy assign json-container to vector [\#635](https://github.com/nlohmann/json/issues/635)
|
||||
- Get size without .dump\(\) [\#634](https://github.com/nlohmann/json/issues/634)
|
||||
- Segmentation fault when parsing invalid json file [\#633](https://github.com/nlohmann/json/issues/633)
|
||||
- How to serialize from json to vector\<customType\>? [\#632](https://github.com/nlohmann/json/issues/632)
|
||||
- no member named 'thousands\_sep' in 'lconv' [\#631](https://github.com/nlohmann/json/issues/631)
|
||||
- \[Question\] Any fork for \(the unsupported\) Visual Studio 2012 version? [\#628](https://github.com/nlohmann/json/issues/628)
|
||||
- Dependency injection in serializer [\#627](https://github.com/nlohmann/json/issues/627)
|
||||
- from\_json for std::array [\#625](https://github.com/nlohmann/json/issues/625)
|
||||
- Discussion: How to structure the parsing function families [\#623](https://github.com/nlohmann/json/issues/623)
|
||||
- Question: How to erase subtree [\#622](https://github.com/nlohmann/json/issues/622)
|
||||
- Insertion into nested json field [\#621](https://github.com/nlohmann/json/issues/621)
|
||||
- \[Question\] When using this as git submodule, will it clone the whole thing include test data and benchmark? [\#620](https://github.com/nlohmann/json/issues/620)
|
||||
- Question: return static json object from function [\#618](https://github.com/nlohmann/json/issues/618)
|
||||
- icc16 error [\#617](https://github.com/nlohmann/json/issues/617)
|
||||
- \[-Wdeprecated-declarations\] in row `j \>\> ss;` in file `json.hpp:7405:26` and FAILED unit tests with MinGWx64! [\#616](https://github.com/nlohmann/json/issues/616)
|
||||
- to\_json for pairs, tuples [\#614](https://github.com/nlohmann/json/issues/614)
|
||||
- Using uninitialized memory 'buf' in line 11173 v2.1.1? [\#613](https://github.com/nlohmann/json/issues/613)
|
||||
- How to parse multiple same Keys of JSON and save them? [\#612](https://github.com/nlohmann/json/issues/612)
|
||||
- "Multiple declarations" error when using types defined with `typedef` [\#611](https://github.com/nlohmann/json/issues/611)
|
||||
- 2.1.1+ breaks compilation of shared\_ptr\<json\> == 0 [\#610](https://github.com/nlohmann/json/issues/610)
|
||||
- a bug of inheritance ? [\#608](https://github.com/nlohmann/json/issues/608)
|
||||
- std::map key conversion with to\_json [\#607](https://github.com/nlohmann/json/issues/607)
|
||||
- json.hpp:6384:62: error: wrong number of template arguments \(1, should be 2\) [\#606](https://github.com/nlohmann/json/issues/606)
|
||||
- Incremental parsing: Where's the push version? [\#605](https://github.com/nlohmann/json/issues/605)
|
||||
- Is there a way to validate the structure of a json object ? [\#604](https://github.com/nlohmann/json/issues/604)
|
||||
- \[Question\] Issue when using Appveyor when compiling library [\#603](https://github.com/nlohmann/json/issues/603)
|
||||
- BOM not skipped when using json:parse\(iterator\) [\#602](https://github.com/nlohmann/json/issues/602)
|
||||
- Use of the binary type in CBOR and Message Pack [\#601](https://github.com/nlohmann/json/issues/601)
|
||||
- Newbie issue: how does one convert a map in Json back to std::map? [\#600](https://github.com/nlohmann/json/issues/600)
|
||||
- Plugin system [\#599](https://github.com/nlohmann/json/issues/599)
|
||||
- Feature request: Comments [\#597](https://github.com/nlohmann/json/issues/597)
|
||||
- Using custom types for scalars? [\#596](https://github.com/nlohmann/json/issues/596)
|
||||
- Issues with the arithmetic in iterator and reverse iterator [\#593](https://github.com/nlohmann/json/issues/593)
|
||||
- not enough examples [\#592](https://github.com/nlohmann/json/issues/592)
|
||||
- in-class initialization for type 'const T' is not yet implemented [\#591](https://github.com/nlohmann/json/issues/591)
|
||||
- compiling with gcc 7 -\> error on bool operator \< [\#590](https://github.com/nlohmann/json/issues/590)
|
||||
- Parsing from stream leads to an array [\#589](https://github.com/nlohmann/json/issues/589)
|
||||
- Buggy support for binary string data [\#587](https://github.com/nlohmann/json/issues/587)
|
||||
- C++17's ambiguous conversion [\#586](https://github.com/nlohmann/json/issues/586)
|
||||
- How does the messagepack encoding/decoding compare to msgpack-cpp in terms of performance? [\#585](https://github.com/nlohmann/json/issues/585)
|
||||
- is it possible to check existence of a value deep in hierarchy? [\#584](https://github.com/nlohmann/json/issues/584)
|
||||
- loading from a stream and exceptions [\#582](https://github.com/nlohmann/json/issues/582)
|
||||
- Visual Studio seems not to have all min\(\) function versions [\#581](https://github.com/nlohmann/json/issues/581)
|
||||
- Supporting of the json schema [\#580](https://github.com/nlohmann/json/issues/580)
|
||||
- Stack-overflow \(OSS-Fuzz 1444\) [\#577](https://github.com/nlohmann/json/issues/577)
|
||||
- Heap-buffer-overflow \(OSS-Fuzz 1400\) [\#575](https://github.com/nlohmann/json/issues/575)
|
||||
- JSON escape quotes [\#574](https://github.com/nlohmann/json/issues/574)
|
||||
- error: static\_assert failed [\#573](https://github.com/nlohmann/json/issues/573)
|
||||
- Storing floats, and round trip serialisation/deserialisation diffs [\#572](https://github.com/nlohmann/json/issues/572)
|
||||
- JSON.getLong produces inconsistent results [\#571](https://github.com/nlohmann/json/issues/571)
|
||||
- Request: Object.at\(\) with default return value [\#570](https://github.com/nlohmann/json/issues/570)
|
||||
- Internal structure gets corrupted while parsing [\#569](https://github.com/nlohmann/json/issues/569)
|
||||
- create template \<typename Iter\> basic\_json from\_cbor\(Iter begin, Iter end\) [\#568](https://github.com/nlohmann/json/issues/568)
|
||||
- Need to improve ignores.. [\#567](https://github.com/nlohmann/json/issues/567)
|
||||
- Conan.io [\#566](https://github.com/nlohmann/json/issues/566)
|
||||
- contradictory documentation regarding json::find [\#565](https://github.com/nlohmann/json/issues/565)
|
||||
- Unexpected '\"' in middle of array [\#564](https://github.com/nlohmann/json/issues/564)
|
||||
- Support parse std::pair to Json object [\#563](https://github.com/nlohmann/json/issues/563)
|
||||
- json and Microsoft Visual c++ Compiler Nov 2012 CTP [\#562](https://github.com/nlohmann/json/issues/562)
|
||||
- from\_json declaration order and exceptions [\#561](https://github.com/nlohmann/json/issues/561)
|
||||
- Tip: Don't upgrade to VS2017 if using json initializer list constructs [\#559](https://github.com/nlohmann/json/issues/559)
|
||||
- parse error - unexpected end of input [\#558](https://github.com/nlohmann/json/issues/558)
|
||||
- Cant modify existing numbers inside a json object [\#557](https://github.com/nlohmann/json/issues/557)
|
||||
- Minimal repository \(current size very large\) [\#556](https://github.com/nlohmann/json/issues/556)
|
||||
- Better support for SAX style serialize and deserialize in new version? [\#554](https://github.com/nlohmann/json/issues/554)
|
||||
- Cannot convert from json array to std::array [\#553](https://github.com/nlohmann/json/issues/553)
|
||||
- Do not define an unnamed namespace in a header file \(DCL59-CPP\) [\#552](https://github.com/nlohmann/json/issues/552)
|
||||
- Parse error on known good json file [\#551](https://github.com/nlohmann/json/issues/551)
|
||||
- Warning on Intel compiler \(icc 17\) [\#550](https://github.com/nlohmann/json/issues/550)
|
||||
- multiple versions of 'vsnprintf' [\#549](https://github.com/nlohmann/json/issues/549)
|
||||
- illegal indirection [\#548](https://github.com/nlohmann/json/issues/548)
|
||||
- Ambiguous compare operators with clang-5.0 [\#547](https://github.com/nlohmann/json/issues/547)
|
||||
- Using tsl::ordered\_map [\#546](https://github.com/nlohmann/json/issues/546)
|
||||
- Compiler support errors are inconvenient [\#544](https://github.com/nlohmann/json/issues/544)
|
||||
- Head Elements Sorting [\#543](https://github.com/nlohmann/json/issues/543)
|
||||
- Duplicate symbols error happens while to\_json/from\_json method implemented inside entity definition header file [\#542](https://github.com/nlohmann/json/issues/542)
|
||||
- consider adding a bool json::is\_valid\(std::string const&\) non-member function [\#541](https://github.com/nlohmann/json/issues/541)
|
||||
- Help request [\#539](https://github.com/nlohmann/json/issues/539)
|
||||
- How to deal with missing keys in `from\_json`? [\#538](https://github.com/nlohmann/json/issues/538)
|
||||
- recursive from\_msgpack implementation will stack overflow [\#537](https://github.com/nlohmann/json/issues/537)
|
||||
- Exception objects must be nothrow copy constructible \(ERR60-CPP\) [\#531](https://github.com/nlohmann/json/issues/531)
|
||||
- Support for multiple root elements [\#529](https://github.com/nlohmann/json/issues/529)
|
||||
- Port has\_shape from dropbox/json11 [\#528](https://github.com/nlohmann/json/issues/528)
|
||||
- dump\_float: truncation from ptrdiff\_t to long [\#527](https://github.com/nlohmann/json/issues/527)
|
||||
- Make exception base class visible in basic\_json [\#525](https://github.com/nlohmann/json/issues/525)
|
||||
- msgpack unit test failures on ppc64 arch [\#524](https://github.com/nlohmann/json/issues/524)
|
||||
- How about split the implementation out, and only leave the interface? [\#523](https://github.com/nlohmann/json/issues/523)
|
||||
- VC++2017 not enough actual parameters for macro 'max' [\#522](https://github.com/nlohmann/json/issues/522)
|
||||
- crash on empty ifstream [\#521](https://github.com/nlohmann/json/issues/521)
|
||||
- Suggestion: Support tabs for indentation when serializing to stream. [\#520](https://github.com/nlohmann/json/issues/520)
|
||||
- Abrt in get\_number \(OSS-Fuzz 885\) [\#519](https://github.com/nlohmann/json/issues/519)
|
||||
- Abrt on unknown address \(OSS-Fuzz 884\) [\#518](https://github.com/nlohmann/json/issues/518)
|
||||
- Stack-overflow \(OSS-Fuzz 869\) [\#517](https://github.com/nlohmann/json/issues/517)
|
||||
- Assertion error \(OSS-Fuzz 868\) [\#516](https://github.com/nlohmann/json/issues/516)
|
||||
- NaN to json and back [\#515](https://github.com/nlohmann/json/issues/515)
|
||||
- Comparison of NaN [\#514](https://github.com/nlohmann/json/issues/514)
|
||||
- why it's not possible to serialize c++11 enums directly [\#513](https://github.com/nlohmann/json/issues/513)
|
||||
- clang compile error: use of overloaded operator '\<=' is ambiguous with \(nlohmann::json{{"a", 5}}\)\["a"\] \<= 10 [\#512](https://github.com/nlohmann/json/issues/512)
|
||||
- Why not also look inside the type for \(static\) to\_json and from\_json funtions? [\#511](https://github.com/nlohmann/json/issues/511)
|
||||
- Parser issues [\#509](https://github.com/nlohmann/json/issues/509)
|
||||
- I may not understand [\#507](https://github.com/nlohmann/json/issues/507)
|
||||
- VS2017 min / max problem for 2.1.1 [\#506](https://github.com/nlohmann/json/issues/506)
|
||||
- CBOR/MessagePack is not read until the end [\#505](https://github.com/nlohmann/json/issues/505)
|
||||
- Assertion error \(OSS-Fuzz 856\) [\#504](https://github.com/nlohmann/json/issues/504)
|
||||
- Return position in parse error exceptions [\#503](https://github.com/nlohmann/json/issues/503)
|
||||
- conversion from/to C array is not supported [\#502](https://github.com/nlohmann/json/issues/502)
|
||||
- error C2338: could not find to\_json\(\) method in T's namespace [\#501](https://github.com/nlohmann/json/issues/501)
|
||||
- Test suite fails in en\_GB.UTF-8 [\#500](https://github.com/nlohmann/json/issues/500)
|
||||
- cannot use operator\[\] with number [\#499](https://github.com/nlohmann/json/issues/499)
|
||||
- consider using \_\_cpp\_exceptions and/or \_\_EXCEPTIONS to disable/enable exception support [\#498](https://github.com/nlohmann/json/issues/498)
|
||||
- Stack-overflow \(OSS-Fuzz issue 814\) [\#497](https://github.com/nlohmann/json/issues/497)
|
||||
- Using in Unreal Engine - handling custom types conversion [\#495](https://github.com/nlohmann/json/issues/495)
|
||||
- Conversion from vector\<bool\> to json fails to build [\#494](https://github.com/nlohmann/json/issues/494)
|
||||
- fill\_line\_buffer incorrectly tests m\_stream for eof but not fail or bad bits [\#493](https://github.com/nlohmann/json/issues/493)
|
||||
- Compiling with \_GLIBCXX\_DEBUG yields iterator-comparison warnings during tests [\#492](https://github.com/nlohmann/json/issues/492)
|
||||
- crapy interface [\#491](https://github.com/nlohmann/json/issues/491)
|
||||
- Fix Visual Studo 2013 builds. [\#490](https://github.com/nlohmann/json/issues/490)
|
||||
- Failed to compile with -D\_GLIBCXX\_PARALLEL [\#489](https://github.com/nlohmann/json/issues/489)
|
||||
- Input several field with the same name [\#488](https://github.com/nlohmann/json/issues/488)
|
||||
- read in .json file yields strange sizes [\#487](https://github.com/nlohmann/json/issues/487)
|
||||
- json::value\_t can't be a map's key type in VC++ 2015 [\#486](https://github.com/nlohmann/json/issues/486)
|
||||
- Using fifo\_map [\#485](https://github.com/nlohmann/json/issues/485)
|
||||
- Cannot get float pointer for value stored as `0` [\#484](https://github.com/nlohmann/json/issues/484)
|
||||
- byte string support [\#483](https://github.com/nlohmann/json/issues/483)
|
||||
- For a header-only library you have to clone 214MB [\#482](https://github.com/nlohmann/json/issues/482)
|
||||
- https://github.com/nlohmann/json\#execute-unit-tests [\#481](https://github.com/nlohmann/json/issues/481)
|
||||
- Remove deprecated constructor basic\_json\(std::istream&\) [\#480](https://github.com/nlohmann/json/issues/480)
|
||||
- writing the binary json file? [\#479](https://github.com/nlohmann/json/issues/479)
|
||||
- CBOR/MessagePack from uint8\_t \* and size [\#478](https://github.com/nlohmann/json/issues/478)
|
||||
- Streaming binary representations [\#477](https://github.com/nlohmann/json/issues/477)
|
||||
- Reuse memory in to\_cbor and to\_msgpack functions [\#476](https://github.com/nlohmann/json/issues/476)
|
||||
- Error Using JSON Library with arrays C++ [\#475](https://github.com/nlohmann/json/issues/475)
|
||||
- Moving forward to version 3.0.0 [\#474](https://github.com/nlohmann/json/issues/474)
|
||||
- Inconsistent behavior in conversion to array type [\#473](https://github.com/nlohmann/json/issues/473)
|
||||
- Create a \[key:member\_pointer\] map to ease parsing custom types [\#471](https://github.com/nlohmann/json/issues/471)
|
||||
- MSVC 2015 update 2 [\#469](https://github.com/nlohmann/json/issues/469)
|
||||
- VS2017 implicit to std::string conversion fix. [\#464](https://github.com/nlohmann/json/issues/464)
|
||||
- How to make sure a string or string literal is a valid JSON? [\#458](https://github.com/nlohmann/json/issues/458)
|
||||
- basic\_json templated on a "policy" class [\#456](https://github.com/nlohmann/json/issues/456)
|
||||
- json::value\(const json\_pointer&, ValueType\) requires exceptions to return the default value. [\#440](https://github.com/nlohmann/json/issues/440)
|
||||
- is it possible merge two json object [\#428](https://github.com/nlohmann/json/issues/428)
|
||||
- Is it possible to turn this into a shared library? [\#420](https://github.com/nlohmann/json/issues/420)
|
||||
- Further thoughts on performance improvements [\#418](https://github.com/nlohmann/json/issues/418)
|
||||
- nan number stored as null [\#388](https://github.com/nlohmann/json/issues/388)
|
||||
- Behavior of operator\>\> should more closely resemble that of built-in overloads. [\#367](https://github.com/nlohmann/json/issues/367)
|
||||
- Request: range-based-for over a json-object to expose .first/.second [\#350](https://github.com/nlohmann/json/issues/350)
|
||||
- feature wish: JSONPath [\#343](https://github.com/nlohmann/json/issues/343)
|
||||
- UTF-8/Unicode escape and dump [\#330](https://github.com/nlohmann/json/issues/330)
|
||||
- Serialized value not always can be parsed. [\#329](https://github.com/nlohmann/json/issues/329)
|
||||
- Is there a way to forward declare nlohmann::json? [\#314](https://github.com/nlohmann/json/issues/314)
|
||||
- Exception line [\#301](https://github.com/nlohmann/json/issues/301)
|
||||
- Do not throw exception when default\_value's type does not match the actual type [\#278](https://github.com/nlohmann/json/issues/278)
|
||||
- dump\(\) method doesn't work with a custom allocator [\#268](https://github.com/nlohmann/json/issues/268)
|
||||
- Readme documentation enhancements [\#248](https://github.com/nlohmann/json/issues/248)
|
||||
- Use user-defined exceptions [\#244](https://github.com/nlohmann/json/issues/244)
|
||||
- Incorrect C++11 allocator model support [\#161](https://github.com/nlohmann/json/issues/161)
|
||||
|
||||
- :white\_check\_mark: re-added tests for algorithms [\#879](https://github.com/nlohmann/json/pull/879) ([nlohmann](https://github.com/nlohmann))
|
||||
- Overworked library toward 3.0.0 release [\#875](https://github.com/nlohmann/json/pull/875) ([nlohmann](https://github.com/nlohmann))
|
||||
- :rotating\_light: remove C4996 warnings \#872 [\#873](https://github.com/nlohmann/json/pull/873) ([nlohmann](https://github.com/nlohmann))
|
||||
- :boom: throwing an exception in case dump encounters a non-UTF-8 string \#838 [\#870](https://github.com/nlohmann/json/pull/870) ([nlohmann](https://github.com/nlohmann))
|
||||
- :memo: fixing documentation \#867 [\#868](https://github.com/nlohmann/json/pull/868) ([nlohmann](https://github.com/nlohmann))
|
||||
- iter\_impl template conformance with C++17 [\#860](https://github.com/nlohmann/json/pull/860) ([bogemic](https://github.com/bogemic))
|
||||
- Std allocator conformance cpp17 [\#856](https://github.com/nlohmann/json/pull/856) ([bogemic](https://github.com/bogemic))
|
||||
- cmake: use BUILD\_INTERFACE/INSTALL\_INTERFACE [\#855](https://github.com/nlohmann/json/pull/855) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- to/from\_json: add a MSVC-specific static\_assert to force a stacktrace [\#854](https://github.com/nlohmann/json/pull/854) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- Add .natvis for MSVC debug view [\#844](https://github.com/nlohmann/json/pull/844) ([TinyTinni](https://github.com/TinyTinni))
|
||||
- Updated hunter package links [\#829](https://github.com/nlohmann/json/pull/829) ([jowr](https://github.com/jowr))
|
||||
- Typos README [\#811](https://github.com/nlohmann/json/pull/811) ([Itja](https://github.com/Itja))
|
||||
- add forwarding references to json\_ref constructor [\#807](https://github.com/nlohmann/json/pull/807) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- Add transparent comparator and perfect forwarding support to find\(\) and count\(\) [\#795](https://github.com/nlohmann/json/pull/795) ([jseward](https://github.com/jseward))
|
||||
- Error : 'identifier "size\_t" is undefined' in linux [\#793](https://github.com/nlohmann/json/pull/793) ([sonulohani](https://github.com/sonulohani))
|
||||
- Fix Visual Studio 2017 warnings [\#788](https://github.com/nlohmann/json/pull/788) ([jseward](https://github.com/jseward))
|
||||
- Fix warning C4706 on Visual Studio 2017 [\#785](https://github.com/nlohmann/json/pull/785) ([jseward](https://github.com/jseward))
|
||||
- Set GENERATE\_TAGFILE in Doxyfile [\#783](https://github.com/nlohmann/json/pull/783) ([eld00d](https://github.com/eld00d))
|
||||
- using more CMake [\#765](https://github.com/nlohmann/json/pull/765) ([nlohmann](https://github.com/nlohmann))
|
||||
- Simplified istream handing \#367 [\#764](https://github.com/nlohmann/json/pull/764) ([pjkundert](https://github.com/pjkundert))
|
||||
- Add info for the vcpkg package. [\#753](https://github.com/nlohmann/json/pull/753) ([gregmarr](https://github.com/gregmarr))
|
||||
- fix from\_json implementation for pair/tuple [\#708](https://github.com/nlohmann/json/pull/708) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- Update json.hpp [\#686](https://github.com/nlohmann/json/pull/686) ([GoWebProd](https://github.com/GoWebProd))
|
||||
- Remove duplicate word [\#685](https://github.com/nlohmann/json/pull/685) ([daixtrose](https://github.com/daixtrose))
|
||||
- To fix compilation issue for intel OSX compiler [\#682](https://github.com/nlohmann/json/pull/682) ([kbthomp1](https://github.com/kbthomp1))
|
||||
- Digraph warning [\#679](https://github.com/nlohmann/json/pull/679) ([traits](https://github.com/traits))
|
||||
- massage -\> message [\#678](https://github.com/nlohmann/json/pull/678) ([DmitryKuk](https://github.com/DmitryKuk))
|
||||
- Fix "not constraint" grammar in docs [\#674](https://github.com/nlohmann/json/pull/674) ([wincent](https://github.com/wincent))
|
||||
- Add documentation for integration with CMake and hunter [\#671](https://github.com/nlohmann/json/pull/671) ([dan-42](https://github.com/dan-42))
|
||||
- REFACTOR: rewrite CMakeLists.txt for better inlcude and reuse [\#669](https://github.com/nlohmann/json/pull/669) ([dan-42](https://github.com/dan-42))
|
||||
- enable\_testing only if the JSON\_BuildTests is ON [\#666](https://github.com/nlohmann/json/pull/666) ([effolkronium](https://github.com/effolkronium))
|
||||
- Support moving from rvalues in std::initializer\_list [\#663](https://github.com/nlohmann/json/pull/663) ([himikof](https://github.com/himikof))
|
||||
- add ensure\_ascii parameter to dump. \#330 [\#654](https://github.com/nlohmann/json/pull/654) ([ryanjmulder](https://github.com/ryanjmulder))
|
||||
- Rename BuildTests to JSON\_BuildTests [\#652](https://github.com/nlohmann/json/pull/652) ([olegendo](https://github.com/olegendo))
|
||||
- Don't include \<iostream\>, use std::make\_shared [\#650](https://github.com/nlohmann/json/pull/650) ([olegendo](https://github.com/olegendo))
|
||||
- Refacto/split basic json [\#643](https://github.com/nlohmann/json/pull/643) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- fix typo in operator\_\_notequal example [\#630](https://github.com/nlohmann/json/pull/630) ([Chocobo1](https://github.com/Chocobo1))
|
||||
- Fix MSVC warning C4819 [\#629](https://github.com/nlohmann/json/pull/629) ([Chocobo1](https://github.com/Chocobo1))
|
||||
- \[BugFix\] Add parentheses around std::min [\#626](https://github.com/nlohmann/json/pull/626) ([koemeet](https://github.com/koemeet))
|
||||
- add pair/tuple conversions [\#624](https://github.com/nlohmann/json/pull/624) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- remove std::pair support [\#615](https://github.com/nlohmann/json/pull/615) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- Add pair support, fix CompatibleObject conversions \(fixes \#600\) [\#609](https://github.com/nlohmann/json/pull/609) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- \#550 Fix iterator related compiling issues for Intel icc [\#598](https://github.com/nlohmann/json/pull/598) ([HenryRLee](https://github.com/HenryRLee))
|
||||
- Issue \#593 Fix the arithmetic operators in the iterator and reverse iterator [\#595](https://github.com/nlohmann/json/pull/595) ([HenryRLee](https://github.com/HenryRLee))
|
||||
- fix doxygen error of basic\_json::get\(\) [\#583](https://github.com/nlohmann/json/pull/583) ([zhaohuaxishi](https://github.com/zhaohuaxishi))
|
||||
- Fixing assignement for iterator wrapper second, and adding unit test [\#579](https://github.com/nlohmann/json/pull/579) ([Type1J](https://github.com/Type1J))
|
||||
- Adding first and second properties to iteration\_proxy\_internal [\#578](https://github.com/nlohmann/json/pull/578) ([Type1J](https://github.com/Type1J))
|
||||
- Adding support for Meson. [\#576](https://github.com/nlohmann/json/pull/576) ([Type1J](https://github.com/Type1J))
|
||||
- add enum class default conversions [\#545](https://github.com/nlohmann/json/pull/545) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- Properly pop diagnostics [\#540](https://github.com/nlohmann/json/pull/540) ([tinloaf](https://github.com/tinloaf))
|
||||
- Add Visual Studio 17 image to appveyor build matrix [\#536](https://github.com/nlohmann/json/pull/536) ([vpetrigo](https://github.com/vpetrigo))
|
||||
- UTF8 encoding enhancement [\#534](https://github.com/nlohmann/json/pull/534) ([TedLyngmo](https://github.com/TedLyngmo))
|
||||
- Fix typo [\#530](https://github.com/nlohmann/json/pull/530) ([berkus](https://github.com/berkus))
|
||||
- Make exception base class visible in basic\_json [\#526](https://github.com/nlohmann/json/pull/526) ([krzysztofwos](https://github.com/krzysztofwos))
|
||||
- :art: Namespace `uint8\_t` from the C++ stdlib [\#510](https://github.com/nlohmann/json/pull/510) ([alex-weej](https://github.com/alex-weej))
|
||||
- add to\_json method for C arrays [\#508](https://github.com/nlohmann/json/pull/508) ([theodelrieu](https://github.com/theodelrieu))
|
||||
- Fix -Weffc++ warnings \(GNU 6.3.1\) [\#496](https://github.com/nlohmann/json/pull/496) ([TedLyngmo](https://github.com/TedLyngmo))
|
||||
|
||||
## [v2.1.1](https://github.com/nlohmann/json/releases/tag/v2.1.1) (2017-02-25)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.1.0...v2.1.1)
|
||||
|
||||
- warning in the library [\#472](https://github.com/nlohmann/json/issues/472)
|
||||
- How to create an array of Objects? [\#470](https://github.com/nlohmann/json/issues/470)
|
||||
- \[Bug?\] Cannot get int pointer, but int64\_t works [\#468](https://github.com/nlohmann/json/issues/468)
|
||||
- Illegal indirection [\#467](https://github.com/nlohmann/json/issues/467)
|
||||
- in vs can't find linkageId [\#466](https://github.com/nlohmann/json/issues/466)
|
||||
- Roundtrip error while parsing "1000000000000000010E5" [\#465](https://github.com/nlohmann/json/issues/465)
|
||||
- C4996 error and warning with Visual Studio [\#463](https://github.com/nlohmann/json/issues/463)
|
||||
- Support startIndex for from\_cbor/from\_msgpack [\#462](https://github.com/nlohmann/json/issues/462)
|
||||
- question: monospace font used in feature slideshow? [\#460](https://github.com/nlohmann/json/issues/460)
|
||||
- Object.keys\(\) [\#459](https://github.com/nlohmann/json/issues/459)
|
||||
- Use “, “ as delimiter for json-objects. [\#457](https://github.com/nlohmann/json/issues/457)
|
||||
- Enum -\> string during serialization and vice versa [\#455](https://github.com/nlohmann/json/issues/455)
|
||||
- doubles are printed as integers [\#454](https://github.com/nlohmann/json/issues/454)
|
||||
- Warnings with Visual Studio c++ \(VS2015 Update 3\) [\#453](https://github.com/nlohmann/json/issues/453)
|
||||
- Heap-buffer-overflow \(OSS-Fuzz issue 585\) [\#452](https://github.com/nlohmann/json/issues/452)
|
||||
- use of undeclared identifier 'UINT8\_MAX' [\#451](https://github.com/nlohmann/json/issues/451)
|
||||
- Question on the lifetime managment of objects at the lower levels [\#449](https://github.com/nlohmann/json/issues/449)
|
||||
- Json should not be constructible with 'json\*' [\#448](https://github.com/nlohmann/json/issues/448)
|
||||
- Move value\_t to namespace scope [\#447](https://github.com/nlohmann/json/issues/447)
|
||||
- Typo in README.md [\#446](https://github.com/nlohmann/json/issues/446)
|
||||
- make check compilation is unneccesarily slow [\#445](https://github.com/nlohmann/json/issues/445)
|
||||
- Problem in dump\(\) in json.h caused by ss.imbue [\#444](https://github.com/nlohmann/json/issues/444)
|
||||
- I want to create Windows Application in Visual Studio 2015 c++, and i have a problem [\#443](https://github.com/nlohmann/json/issues/443)
|
||||
- Implicit conversion issues [\#442](https://github.com/nlohmann/json/issues/442)
|
||||
- Parsing of floats locale dependent [\#302](https://github.com/nlohmann/json/issues/302)
|
||||
|
||||
- Speedup CI builds using cotire [\#461](https://github.com/nlohmann/json/pull/461) ([tusharpm](https://github.com/tusharpm))
|
||||
- TurpentineDistillery feature/locale independent str to num [\#450](https://github.com/nlohmann/json/pull/450) ([nlohmann](https://github.com/nlohmann))
|
||||
- README: adjust boost::optional example [\#439](https://github.com/nlohmann/json/pull/439) ([jaredgrubb](https://github.com/jaredgrubb))
|
||||
- fix \#414 - comparing to 0 literal [\#415](https://github.com/nlohmann/json/pull/415) ([stanmihai4](https://github.com/stanmihai4))
|
||||
|
||||
## [v2.1.0](https://github.com/nlohmann/json/releases/tag/v2.1.0) (2017-01-28)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.10...v2.1.0)
|
||||
|
||||
- Parsing multiple JSON objects from a string or stream [\#438](https://github.com/nlohmann/json/issues/438)
|
||||
- Use-of-uninitialized-value \(OSS-Fuzz issue 477\) [\#437](https://github.com/nlohmann/json/issues/437)
|
||||
- add `reserve` function for array to reserve memory before adding json values into it [\#436](https://github.com/nlohmann/json/issues/436)
|
||||
- Typo in examples page [\#434](https://github.com/nlohmann/json/issues/434)
|
||||
- avoid malformed json [\#433](https://github.com/nlohmann/json/issues/433)
|
||||
- How to add json objects to a map? [\#432](https://github.com/nlohmann/json/issues/432)
|
||||
- create json instance from raw json \(unsigned char\*\) [\#431](https://github.com/nlohmann/json/issues/431)
|
||||
- Getting std::invalid\_argument: stream error when following example [\#429](https://github.com/nlohmann/json/issues/429)
|
||||
- Forward declare-only header? [\#427](https://github.com/nlohmann/json/issues/427)
|
||||
- Implicit conversion from array to object [\#425](https://github.com/nlohmann/json/issues/425)
|
||||
- Automatic ordered JSON [\#424](https://github.com/nlohmann/json/issues/424)
|
||||
- error C4996: 'strerror' when reading file [\#422](https://github.com/nlohmann/json/issues/422)
|
||||
- Get an error - JSON pointer must be empty or begin with '/' [\#421](https://github.com/nlohmann/json/issues/421)
|
||||
- size parameter for parse\(\) [\#419](https://github.com/nlohmann/json/issues/419)
|
||||
- json.hpp forcibly defines GCC\_VERSION [\#417](https://github.com/nlohmann/json/issues/417)
|
||||
- Use-of-uninitialized-value \(OSS-Fuzz issue 377\) [\#416](https://github.com/nlohmann/json/issues/416)
|
||||
- comparing to 0 literal [\#414](https://github.com/nlohmann/json/issues/414)
|
||||
- Single char converted to ASCII code instead of string [\#413](https://github.com/nlohmann/json/issues/413)
|
||||
- How to know if a string was parsed as utf-8? [\#406](https://github.com/nlohmann/json/issues/406)
|
||||
- Overloaded += to add objects to an array makes no sense? [\#404](https://github.com/nlohmann/json/issues/404)
|
||||
- Finding a value in an array [\#399](https://github.com/nlohmann/json/issues/399)
|
||||
- add release information in static function [\#397](https://github.com/nlohmann/json/issues/397)
|
||||
- Optimize memory usage of json objects in combination with binary serialization [\#373](https://github.com/nlohmann/json/issues/373)
|
||||
- Conversion operators not considered [\#369](https://github.com/nlohmann/json/issues/369)
|
||||
- Append ".0" to serialized floating\_point values that are digits-only. [\#362](https://github.com/nlohmann/json/issues/362)
|
||||
- Add a customization point for user-defined types [\#328](https://github.com/nlohmann/json/issues/328)
|
||||
- Conformance report for reference [\#307](https://github.com/nlohmann/json/issues/307)
|
||||
- Document the best way to serialize/deserialize user defined types to json [\#298](https://github.com/nlohmann/json/issues/298)
|
||||
- Add StringView template typename to basic\_json [\#297](https://github.com/nlohmann/json/issues/297)
|
||||
- \[Improvement\] Add option to remove exceptions [\#296](https://github.com/nlohmann/json/issues/296)
|
||||
- Performance in miloyip/nativejson-benchmark [\#202](https://github.com/nlohmann/json/issues/202)
|
||||
|
||||
- conversion from/to user-defined types [\#435](https://github.com/nlohmann/json/pull/435) ([nlohmann](https://github.com/nlohmann))
|
||||
- Fix documentation error [\#430](https://github.com/nlohmann/json/pull/430) ([vjon](https://github.com/vjon))
|
||||
- locale-independent num-to-str [\#378](https://github.com/nlohmann/json/pull/378) ([TurpentineDistillery](https://github.com/TurpentineDistillery))
|
||||
|
||||
## [v2.0.10](https://github.com/nlohmann/json/releases/tag/v2.0.10) (2017-01-02)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.9...v2.0.10)
|
||||
|
||||
- Heap-buffer-overflow \(OSS-Fuzz issue 367\) [\#412](https://github.com/nlohmann/json/issues/412)
|
||||
- Heap-buffer-overflow \(OSS-Fuzz issue 366\) [\#411](https://github.com/nlohmann/json/issues/411)
|
||||
- Use-of-uninitialized-value \(OSS-Fuzz issue 347\) [\#409](https://github.com/nlohmann/json/issues/409)
|
||||
- Heap-buffer-overflow \(OSS-Fuzz issue 344\) [\#408](https://github.com/nlohmann/json/issues/408)
|
||||
- Heap-buffer-overflow \(OSS-Fuzz issue 343\) [\#407](https://github.com/nlohmann/json/issues/407)
|
||||
- Heap-buffer-overflow \(OSS-Fuzz issue 342\) [\#405](https://github.com/nlohmann/json/issues/405)
|
||||
- strerror throwing error in compiler VS2015 [\#403](https://github.com/nlohmann/json/issues/403)
|
||||
- json::parse of std::string being underlined by Visual Studio [\#402](https://github.com/nlohmann/json/issues/402)
|
||||
- Explicitly getting string without .dump\(\) [\#401](https://github.com/nlohmann/json/issues/401)
|
||||
- Possible to speed up json::parse? [\#398](https://github.com/nlohmann/json/issues/398)
|
||||
- the alphabetic order in the code influence console\_output. [\#396](https://github.com/nlohmann/json/issues/396)
|
||||
- Execute tests with clang sanitizers [\#394](https://github.com/nlohmann/json/issues/394)
|
||||
- Check if library can be used with ETL [\#361](https://github.com/nlohmann/json/issues/361)
|
||||
|
||||
- Feature/clang sanitize [\#410](https://github.com/nlohmann/json/pull/410) ([Daniel599](https://github.com/Daniel599))
|
||||
- Add Doozer build badge [\#400](https://github.com/nlohmann/json/pull/400) ([andoma](https://github.com/andoma))
|
||||
|
||||
## [v2.0.9](https://github.com/nlohmann/json/releases/tag/v2.0.9) (2016-12-16)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.8...v2.0.9)
|
||||
|
||||
- \#pragma GCC diagnostic ignored "-Wdocumentation" [\#393](https://github.com/nlohmann/json/issues/393)
|
||||
- How to parse this json file and write separate sub object as json files? [\#392](https://github.com/nlohmann/json/issues/392)
|
||||
- Integer-overflow \(OSS-Fuzz issue 267\) [\#389](https://github.com/nlohmann/json/issues/389)
|
||||
- Implement indefinite-length types from RFC 7049 [\#387](https://github.com/nlohmann/json/issues/387)
|
||||
- template parameter "T" is not used in declaring the parameter types of function template [\#386](https://github.com/nlohmann/json/issues/386)
|
||||
- Serializing json instances containing already serialized string values without escaping [\#385](https://github.com/nlohmann/json/issues/385)
|
||||
- Add test cases from RFC 7049 [\#384](https://github.com/nlohmann/json/issues/384)
|
||||
- Add a table of contents to the README file [\#383](https://github.com/nlohmann/json/issues/383)
|
||||
- Update FAQ section in the guidelines for contributing [\#382](https://github.com/nlohmann/json/issues/382)
|
||||
- Allow for forward declaring nlohmann::json [\#381](https://github.com/nlohmann/json/issues/381)
|
||||
- Bug in overflow detection when parsing integers [\#380](https://github.com/nlohmann/json/issues/380)
|
||||
- A unique name to mention the library? [\#377](https://github.com/nlohmann/json/issues/377)
|
||||
- Support for comments. [\#376](https://github.com/nlohmann/json/issues/376)
|
||||
- Non-unique keys in objects. [\#375](https://github.com/nlohmann/json/issues/375)
|
||||
- Request: binary serialization/deserialization [\#358](https://github.com/nlohmann/json/issues/358)
|
||||
|
||||
- Replace class iterator and const\_iterator by using a single template class to reduce code. [\#395](https://github.com/nlohmann/json/pull/395) ([Bosswestfalen](https://github.com/Bosswestfalen))
|
||||
- Clang: quiet a warning [\#391](https://github.com/nlohmann/json/pull/391) ([jaredgrubb](https://github.com/jaredgrubb))
|
||||
- Fix issue \#380: Signed integer overflow check [\#390](https://github.com/nlohmann/json/pull/390) ([qwename](https://github.com/qwename))
|
||||
|
||||
## [v2.0.8](https://github.com/nlohmann/json/releases/tag/v2.0.8) (2016-12-02)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.7...v2.0.8)
|
||||
|
||||
- Reading from file [\#374](https://github.com/nlohmann/json/issues/374)
|
||||
- Compiler warnings? [\#372](https://github.com/nlohmann/json/issues/372)
|
||||
- docs: how to release a json object in memory? [\#371](https://github.com/nlohmann/json/issues/371)
|
||||
- crash in dump [\#370](https://github.com/nlohmann/json/issues/370)
|
||||
- Coverity issue \(FORWARD\_NULL\) in lexer\(std::istream& s\) [\#368](https://github.com/nlohmann/json/issues/368)
|
||||
- json::parse on failed stream gets stuck [\#366](https://github.com/nlohmann/json/issues/366)
|
||||
- Performance improvements [\#365](https://github.com/nlohmann/json/issues/365)
|
||||
- 'to\_string' is not a member of 'std' [\#364](https://github.com/nlohmann/json/issues/364)
|
||||
- Optional comment support. [\#363](https://github.com/nlohmann/json/issues/363)
|
||||
- Crash in dump\(\) from a static object [\#359](https://github.com/nlohmann/json/issues/359)
|
||||
- json::parse\(...\) vs json j; j.parse\(...\) [\#357](https://github.com/nlohmann/json/issues/357)
|
||||
- Hi, is there any method to dump json to string with the insert order rather than alphabets [\#356](https://github.com/nlohmann/json/issues/356)
|
||||
- Provide an example of reading from an json with only a key that has an array of strings. [\#354](https://github.com/nlohmann/json/issues/354)
|
||||
- Request: access with default value. [\#353](https://github.com/nlohmann/json/issues/353)
|
||||
- {} and \[\] causes parser error. [\#352](https://github.com/nlohmann/json/issues/352)
|
||||
- Reading a JSON file into a JSON object [\#351](https://github.com/nlohmann/json/issues/351)
|
||||
- Request: 'emplace\_back' [\#349](https://github.com/nlohmann/json/issues/349)
|
||||
- Is it possible to stream data through the json parser without storing everything in memory? [\#347](https://github.com/nlohmann/json/issues/347)
|
||||
- pure virtual conversion operator [\#346](https://github.com/nlohmann/json/issues/346)
|
||||
- Floating point precision lost [\#345](https://github.com/nlohmann/json/issues/345)
|
||||
- unit-conversions SIGSEGV on armv7hl [\#303](https://github.com/nlohmann/json/issues/303)
|
||||
- Coverity scan fails [\#299](https://github.com/nlohmann/json/issues/299)
|
||||
- Using QString as string type [\#274](https://github.com/nlohmann/json/issues/274)
|
||||
|
||||
## [v2.0.7](https://github.com/nlohmann/json/releases/tag/v2.0.7) (2016-11-02)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.6...v2.0.7)
|
||||
|
||||
- JSON5 [\#348](https://github.com/nlohmann/json/issues/348)
|
||||
- Check "Parsing JSON is a Minefield" [\#344](https://github.com/nlohmann/json/issues/344)
|
||||
- Allow hex numbers [\#342](https://github.com/nlohmann/json/issues/342)
|
||||
- Convert strings to numbers [\#341](https://github.com/nlohmann/json/issues/341)
|
||||
- ""-operators ignore the length parameter [\#340](https://github.com/nlohmann/json/issues/340)
|
||||
- JSON into std::tuple [\#339](https://github.com/nlohmann/json/issues/339)
|
||||
- JSON into vector [\#335](https://github.com/nlohmann/json/issues/335)
|
||||
- Installing with Homebrew on Mac Errors \(El Capitan\) [\#331](https://github.com/nlohmann/json/issues/331)
|
||||
- g++ make check results in error [\#312](https://github.com/nlohmann/json/issues/312)
|
||||
- Cannot convert from 'json' to 'char' [\#276](https://github.com/nlohmann/json/issues/276)
|
||||
- Please add a Pretty-Print option for arrays to stay always in one line [\#229](https://github.com/nlohmann/json/issues/229)
|
||||
- Conversion to STL map\<string, vector\<int\>\> gives error [\#220](https://github.com/nlohmann/json/issues/220)
|
||||
- std::unorderd\_map cannot be used as ObjectType [\#164](https://github.com/nlohmann/json/issues/164)
|
||||
|
||||
- fix minor grammar/style issue in README.md [\#336](https://github.com/nlohmann/json/pull/336) ([seeekr](https://github.com/seeekr))
|
||||
|
||||
## [v2.0.6](https://github.com/nlohmann/json/releases/tag/v2.0.6) (2016-10-15)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.5...v2.0.6)
|
||||
|
||||
- How to handle json files? [\#333](https://github.com/nlohmann/json/issues/333)
|
||||
- This file requires compiler and library support .... [\#332](https://github.com/nlohmann/json/issues/332)
|
||||
- Segmentation fault on saving json to file [\#326](https://github.com/nlohmann/json/issues/326)
|
||||
- parse error - unexpected \<uninitialized\> with 2.0.5 [\#325](https://github.com/nlohmann/json/issues/325)
|
||||
- Add nested object capability to pointers [\#323](https://github.com/nlohmann/json/issues/323)
|
||||
- Fix usage examples' comments for std::multiset [\#322](https://github.com/nlohmann/json/issues/322)
|
||||
- json\_unit runs forever when executed in build directory [\#319](https://github.com/nlohmann/json/issues/319)
|
||||
- Visual studio 2015 update3 true != TRUE [\#317](https://github.com/nlohmann/json/issues/317)
|
||||
- releasing single header file in compressed format [\#316](https://github.com/nlohmann/json/issues/316)
|
||||
- json object from std::ifstream [\#315](https://github.com/nlohmann/json/issues/315)
|
||||
|
||||
- make has\_mapped\_type struct friendly [\#324](https://github.com/nlohmann/json/pull/324) ([vpetrigo](https://github.com/vpetrigo))
|
||||
- Fix usage examples' comments for std::multiset [\#321](https://github.com/nlohmann/json/pull/321) ([vasild](https://github.com/vasild))
|
||||
- Include dir relocation [\#318](https://github.com/nlohmann/json/pull/318) ([ChristophJud](https://github.com/ChristophJud))
|
||||
- trivial documentation fix [\#313](https://github.com/nlohmann/json/pull/313) ([5tefan](https://github.com/5tefan))
|
||||
|
||||
## [v2.0.5](https://github.com/nlohmann/json/releases/tag/v2.0.5) (2016-09-14)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.4...v2.0.5)
|
||||
|
||||
- make json\_benchmarks no longer working in 2.0.4 [\#310](https://github.com/nlohmann/json/issues/310)
|
||||
|
||||
- \[feature request\]: schema validator and comments [\#311](https://github.com/nlohmann/json/issues/311)
|
||||
- make json\_benchmarks no longer working in 2.0.4 [\#310](https://github.com/nlohmann/json/issues/310)
|
||||
- Segmentation fault \(core dumped\) [\#309](https://github.com/nlohmann/json/issues/309)
|
||||
- No matching member function for call to 'get\_impl' [\#308](https://github.com/nlohmann/json/issues/308)
|
||||
|
||||
## [v2.0.4](https://github.com/nlohmann/json/releases/tag/v2.0.4) (2016-09-11)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.3...v2.0.4)
|
||||
|
||||
- Parsing fails without space at end of file [\#306](https://github.com/nlohmann/json/issues/306)
|
||||
|
||||
- json schema validator [\#305](https://github.com/nlohmann/json/issues/305)
|
||||
- Unused variable warning [\#304](https://github.com/nlohmann/json/issues/304)
|
||||
|
||||
## [v2.0.3](https://github.com/nlohmann/json/releases/tag/v2.0.3) (2016-08-31)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.2...v2.0.3)
|
||||
|
||||
- Support for iterator-range parsing [\#290](https://github.com/nlohmann/json/issues/290)
|
||||
|
||||
- warning C4706: assignment within conditional expression [\#295](https://github.com/nlohmann/json/issues/295)
|
||||
- Strip comments / Minify [\#294](https://github.com/nlohmann/json/issues/294)
|
||||
- Q: Is it possible to build json tree from already UTF8 encoded values? [\#293](https://github.com/nlohmann/json/issues/293)
|
||||
- Equality operator results in array when assigned object [\#292](https://github.com/nlohmann/json/issues/292)
|
||||
- Support for integers not from the range \[-\(2\*\*53\)+1, \(2\*\*53\)-1\] in parser [\#291](https://github.com/nlohmann/json/issues/291)
|
||||
- Support for iterator-range parsing [\#290](https://github.com/nlohmann/json/issues/290)
|
||||
- Horribly inconsistent behavior between const/non-const reference in operator \[\] \(\) [\#289](https://github.com/nlohmann/json/issues/289)
|
||||
- Silently get numbers into smaller types [\#288](https://github.com/nlohmann/json/issues/288)
|
||||
- Incorrect parsing of large int64\_t numbers [\#287](https://github.com/nlohmann/json/issues/287)
|
||||
- \[question\]: macro to disable floating point support [\#284](https://github.com/nlohmann/json/issues/284)
|
||||
|
||||
- unit-constructor1.cpp: Fix floating point truncation warning [\#300](https://github.com/nlohmann/json/pull/300) ([t-b](https://github.com/t-b))
|
||||
|
||||
## [v2.0.2](https://github.com/nlohmann/json/releases/tag/v2.0.2) (2016-07-31)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.1...v2.0.2)
|
||||
|
||||
- can function dump\(\) return string in the order I push in the json object ? [\#286](https://github.com/nlohmann/json/issues/286)
|
||||
- Error on the Mac: Undefined symbols for architecture x86\_64 [\#285](https://github.com/nlohmann/json/issues/285)
|
||||
- value\(\) does not work with \_json\_pointer types [\#283](https://github.com/nlohmann/json/issues/283)
|
||||
- Easy serialization of classes [\#280](https://github.com/nlohmann/json/issues/280)
|
||||
|
||||
- Build error for std::int64 [\#282](https://github.com/nlohmann/json/issues/282)
|
||||
|
||||
- strings can't be accessed after dump\(\)-\>parse\(\) - type is lost [\#281](https://github.com/nlohmann/json/issues/281)
|
||||
- Easy serialization of classes [\#280](https://github.com/nlohmann/json/issues/280)
|
||||
- recursive data structures [\#277](https://github.com/nlohmann/json/issues/277)
|
||||
- hexify\(\) function emits conversion warning [\#270](https://github.com/nlohmann/json/issues/270)
|
||||
|
||||
- let the makefile choose the correct sed [\#279](https://github.com/nlohmann/json/pull/279) ([murinicanor](https://github.com/murinicanor))
|
||||
@@ -41,6 +650,7 @@ All notable changes to this project will be documented in this file. This projec
|
||||
## [v2.0.1](https://github.com/nlohmann/json/releases/tag/v2.0.1) (2016-06-28)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.0...v2.0.1)
|
||||
|
||||
- Compilation error. [\#273](https://github.com/nlohmann/json/issues/273)
|
||||
- dump\(\) performance degradation in v2 [\#272](https://github.com/nlohmann/json/issues/272)
|
||||
|
||||
- fixed a tiny typo [\#271](https://github.com/nlohmann/json/pull/271) ([thelostt](https://github.com/thelostt))
|
||||
@@ -48,43 +658,61 @@ All notable changes to this project will be documented in this file. This projec
|
||||
## [v2.0.0](https://github.com/nlohmann/json/releases/tag/v2.0.0) (2016-06-23)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v1.1.0...v2.0.0)
|
||||
|
||||
- concatenate objects [\#252](https://github.com/nlohmann/json/issues/252)
|
||||
- Unit test fails when doing a CMake out-of-tree build [\#241](https://github.com/nlohmann/json/issues/241)
|
||||
- Additional integration options [\#237](https://github.com/nlohmann/json/issues/237)
|
||||
- Can't use basic\_json::iterator as a base iterator for std::move\_iterator [\#233](https://github.com/nlohmann/json/issues/233)
|
||||
- Provide a FAQ [\#163](https://github.com/nlohmann/json/issues/163)
|
||||
- Create PULL\_REQUEST\_TEMPLATE.md [\#213](https://github.com/nlohmann/json/pull/213) ([whackashoe](https://github.com/whackashoe))
|
||||
- fixed noexcept; added constexpr [\#208](https://github.com/nlohmann/json/pull/208) ([nlohmann](https://github.com/nlohmann))
|
||||
- Add support for afl-fuzz testing [\#207](https://github.com/nlohmann/json/pull/207) ([mykter](https://github.com/mykter))
|
||||
- Issue \#178 - Extending support to full uint64\_t/int64\_t range and unsigned type \(updated\) [\#193](https://github.com/nlohmann/json/pull/193) ([twelsby](https://github.com/twelsby))
|
||||
|
||||
- json::diff generates incorrect patch when removing multiple array elements. [\#269](https://github.com/nlohmann/json/issues/269)
|
||||
- Docs - What does Json\[key\] return? [\#267](https://github.com/nlohmann/json/issues/267)
|
||||
- Compiler Errors With JSON.hpp [\#265](https://github.com/nlohmann/json/issues/265)
|
||||
- Throw exception instead of crashing my app [\#264](https://github.com/nlohmann/json/issues/264)
|
||||
- Ambiguous push\_back and operator+= overloads [\#263](https://github.com/nlohmann/json/issues/263)
|
||||
- Preseving order of items in json [\#262](https://github.com/nlohmann/json/issues/262)
|
||||
- '\' char problem in strings [\#261](https://github.com/nlohmann/json/issues/261)
|
||||
- VS2015 compile fail [\#260](https://github.com/nlohmann/json/issues/260)
|
||||
- -Wconversion warning [\#259](https://github.com/nlohmann/json/issues/259)
|
||||
- Maybe a bug [\#258](https://github.com/nlohmann/json/issues/258)
|
||||
- Few tests failed on Visual C++ 2015 [\#257](https://github.com/nlohmann/json/issues/257)
|
||||
- Access keys when iteration with new for loop C++11 [\#256](https://github.com/nlohmann/json/issues/256)
|
||||
- multiline text values [\#255](https://github.com/nlohmann/json/issues/255)
|
||||
- Error when using json in g++ [\#254](https://github.com/nlohmann/json/issues/254)
|
||||
- is the release 2.0? [\#253](https://github.com/nlohmann/json/issues/253)
|
||||
- concatenate objects [\#252](https://github.com/nlohmann/json/issues/252)
|
||||
- Encoding [\#251](https://github.com/nlohmann/json/issues/251)
|
||||
- Unable to build example for constructing json object with stringstreams [\#250](https://github.com/nlohmann/json/issues/250)
|
||||
- Hexadecimal support [\#249](https://github.com/nlohmann/json/issues/249)
|
||||
- Update long-term goals [\#246](https://github.com/nlohmann/json/issues/246)
|
||||
- Contribution To This Json Project [\#245](https://github.com/nlohmann/json/issues/245)
|
||||
- Trouble using parser with initial dictionary [\#243](https://github.com/nlohmann/json/issues/243)
|
||||
- Unit test fails when doing a CMake out-of-tree build [\#241](https://github.com/nlohmann/json/issues/241)
|
||||
- -Wconversion warnings [\#239](https://github.com/nlohmann/json/issues/239)
|
||||
- Additional integration options [\#237](https://github.com/nlohmann/json/issues/237)
|
||||
- .get\<std::string\>\(\) works for non spaced string but returns as array for spaced/longer strings [\#236](https://github.com/nlohmann/json/issues/236)
|
||||
- ambiguous overload for 'push\_back' and 'operator+=' [\#235](https://github.com/nlohmann/json/issues/235)
|
||||
- Can't use basic\_json::iterator as a base iterator for std::move\_iterator [\#233](https://github.com/nlohmann/json/issues/233)
|
||||
- json object's creation can freezes execution [\#231](https://github.com/nlohmann/json/issues/231)
|
||||
- Incorrect dumping of parsed numbers with exponents, but without decimal places [\#230](https://github.com/nlohmann/json/issues/230)
|
||||
- double values are serialized with commas as decimal points [\#228](https://github.com/nlohmann/json/issues/228)
|
||||
- Move semantics with std::initializer\_list [\#225](https://github.com/nlohmann/json/issues/225)
|
||||
- replace emplace [\#224](https://github.com/nlohmann/json/issues/224)
|
||||
- abort during getline in yyfill [\#223](https://github.com/nlohmann/json/issues/223)
|
||||
- free\(\): invalid pointer error in GCC 5.2.1 [\#221](https://github.com/nlohmann/json/issues/221)
|
||||
- Error compile Android NDK error: 'strtof' is not a member of 'std' [\#219](https://github.com/nlohmann/json/issues/219)
|
||||
- Wrong link in the README.md [\#217](https://github.com/nlohmann/json/issues/217)
|
||||
- Wide character strings not supported [\#216](https://github.com/nlohmann/json/issues/216)
|
||||
- Memory allocations using range-based for loops [\#214](https://github.com/nlohmann/json/issues/214)
|
||||
- would you like to support gcc 4.8.1? [\#211](https://github.com/nlohmann/json/issues/211)
|
||||
- Reading concatenated json's from an istream [\#210](https://github.com/nlohmann/json/issues/210)
|
||||
- Conflicting typedef of ssize\_t on Windows 32 bit when using Boost.Python [\#204](https://github.com/nlohmann/json/issues/204)
|
||||
- Inconsistency between operator\[\] and push\_back [\#203](https://github.com/nlohmann/json/issues/203)
|
||||
- Small bugs in json.hpp \(get\_number\) and unit.cpp \(non-standard integer type test\) [\#199](https://github.com/nlohmann/json/issues/199)
|
||||
- GCC/clang floating point parsing bug in strtod\(\) [\#195](https://github.com/nlohmann/json/issues/195)
|
||||
- What is within scope? [\#192](https://github.com/nlohmann/json/issues/192)
|
||||
- Bugs in miloyip/nativejson-benchmark: roundtrips [\#187](https://github.com/nlohmann/json/issues/187)
|
||||
- Floating point exceptions [\#181](https://github.com/nlohmann/json/issues/181)
|
||||
- In basic\_json::basic\_json\(const CompatibleArrayType& val\), the requirement of CompatibleArrayType is not strict enough. [\#174](https://github.com/nlohmann/json/issues/174)
|
||||
- Implicit assignment to std::string fails [\#144](https://github.com/nlohmann/json/issues/144)
|
||||
- Fix Issue \#265 [\#266](https://github.com/nlohmann/json/pull/266) ([06needhamt](https://github.com/06needhamt))
|
||||
- Issue \#195 - update Travis to Trusty due to gcc/clang strtod\(\) bug [\#196](https://github.com/nlohmann/json/pull/196) ([twelsby](https://github.com/twelsby))
|
||||
|
||||
- Compiler Errors With JSON.hpp [\#265](https://github.com/nlohmann/json/issues/265)
|
||||
- VS2015 compile fail [\#260](https://github.com/nlohmann/json/issues/260)
|
||||
- Error when using json in g++ [\#254](https://github.com/nlohmann/json/issues/254)
|
||||
- Update long-term goals [\#246](https://github.com/nlohmann/json/issues/246)
|
||||
- Error compile Android NDK error: 'strtof' is not a member of 'std' [\#219](https://github.com/nlohmann/json/issues/219)
|
||||
- Conflicting typedef of ssize\_t on Windows 32 bit when using Boost.Python [\#204](https://github.com/nlohmann/json/issues/204)
|
||||
- Integer conversion to unsigned [\#178](https://github.com/nlohmann/json/issues/178)
|
||||
- map string string fails to compile [\#176](https://github.com/nlohmann/json/issues/176)
|
||||
- In basic\_json::basic\_json\(const CompatibleArrayType& val\), the requirement of CompatibleArrayType is not strict enough. [\#174](https://github.com/nlohmann/json/issues/174)
|
||||
- Provide a FAQ [\#163](https://github.com/nlohmann/json/issues/163)
|
||||
- Implicit assignment to std::string fails [\#144](https://github.com/nlohmann/json/issues/144)
|
||||
|
||||
- Fix Issue \#265 [\#266](https://github.com/nlohmann/json/pull/266) ([06needhamt](https://github.com/06needhamt))
|
||||
- Define CMake/CTest tests [\#247](https://github.com/nlohmann/json/pull/247) ([robertmrk](https://github.com/robertmrk))
|
||||
- Out of tree builds and a few other miscellaneous CMake cleanups. [\#242](https://github.com/nlohmann/json/pull/242) ([ChrisKitching](https://github.com/ChrisKitching))
|
||||
- Implement additional integration options [\#238](https://github.com/nlohmann/json/pull/238) ([robertmrk](https://github.com/robertmrk))
|
||||
@@ -93,73 +721,81 @@ All notable changes to this project will be documented in this file. This projec
|
||||
- Use namespace std for int64\_t and uint64\_t [\#226](https://github.com/nlohmann/json/pull/226) ([lv-zheng](https://github.com/lv-zheng))
|
||||
- Added missing cerrno header to fix ERANGE compile error on android [\#222](https://github.com/nlohmann/json/pull/222) ([Teemperor](https://github.com/Teemperor))
|
||||
- Corrected readme [\#218](https://github.com/nlohmann/json/pull/218) ([Annihil](https://github.com/Annihil))
|
||||
- Create PULL\_REQUEST\_TEMPLATE.md [\#213](https://github.com/nlohmann/json/pull/213) ([whackashoe](https://github.com/whackashoe))
|
||||
- fixed noexcept; added constexpr [\#208](https://github.com/nlohmann/json/pull/208) ([nlohmann](https://github.com/nlohmann))
|
||||
- Add support for afl-fuzz testing [\#207](https://github.com/nlohmann/json/pull/207) ([mykter](https://github.com/mykter))
|
||||
- replaced ssize\_t occurrences with auto \(addresses \#204\) [\#205](https://github.com/nlohmann/json/pull/205) ([nlohmann](https://github.com/nlohmann))
|
||||
- Fixed issue \#199 - Small bugs in json.hpp \(get\_number\) and unit.cpp \(non-standard integer type test\) [\#200](https://github.com/nlohmann/json/pull/200) ([twelsby](https://github.com/twelsby))
|
||||
- Fix broken link [\#197](https://github.com/nlohmann/json/pull/197) ([vog](https://github.com/vog))
|
||||
- Issue \#195 - update Travis to Trusty due to gcc/clang strtod\(\) bug [\#196](https://github.com/nlohmann/json/pull/196) ([twelsby](https://github.com/twelsby))
|
||||
- Issue \#178 - Extending support to full uint64\_t/int64\_t range and unsigned type \(updated\) [\#193](https://github.com/nlohmann/json/pull/193) ([twelsby](https://github.com/twelsby))
|
||||
|
||||
## [v1.1.0](https://github.com/nlohmann/json/releases/tag/v1.1.0) (2016-01-24)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v1.0.0...v1.1.0)
|
||||
|
||||
- JSON performance benchmark comparision [\#177](https://github.com/nlohmann/json/issues/177)
|
||||
- Since re2c is often ignored in pull requests, it may make sense to make a contributing.md file [\#175](https://github.com/nlohmann/json/issues/175)
|
||||
- Add assertions [\#168](https://github.com/nlohmann/json/issues/168)
|
||||
- range based for loop for objects [\#83](https://github.com/nlohmann/json/issues/83)
|
||||
- Implementation of get\_ref\(\) [\#184](https://github.com/nlohmann/json/pull/184) ([dariomt](https://github.com/dariomt))
|
||||
|
||||
- Small error in pull \#185 [\#194](https://github.com/nlohmann/json/issues/194)
|
||||
- Bugs in miloyip/nativejson-benchmark: floating-point parsing [\#186](https://github.com/nlohmann/json/issues/186)
|
||||
- Cannot index by key of type static constexpr const char\* [\#171](https://github.com/nlohmann/json/issues/171)
|
||||
- Fixed Issue \#171 - added two extra template overloads of operator\[\] for T\* arguments [\#189](https://github.com/nlohmann/json/pull/189) ([twelsby](https://github.com/twelsby))
|
||||
- Fixed issue \#167 - removed operator ValueType\(\) condition for VS2015 [\#188](https://github.com/nlohmann/json/pull/188) ([twelsby](https://github.com/twelsby))
|
||||
|
||||
- Floating point equality [\#185](https://github.com/nlohmann/json/issues/185)
|
||||
- Unused variables in catch [\#180](https://github.com/nlohmann/json/issues/180)
|
||||
- Typo in documentation [\#179](https://github.com/nlohmann/json/issues/179)
|
||||
- JSON performance benchmark comparision [\#177](https://github.com/nlohmann/json/issues/177)
|
||||
- Since re2c is often ignored in pull requests, it may make sense to make a contributing.md file [\#175](https://github.com/nlohmann/json/issues/175)
|
||||
- Question about exceptions [\#173](https://github.com/nlohmann/json/issues/173)
|
||||
- Android? [\#172](https://github.com/nlohmann/json/issues/172)
|
||||
- Cannot index by key of type static constexpr const char\* [\#171](https://github.com/nlohmann/json/issues/171)
|
||||
- Add assertions [\#168](https://github.com/nlohmann/json/issues/168)
|
||||
- MSVC 2015 build fails when attempting to compare object\_t [\#167](https://github.com/nlohmann/json/issues/167)
|
||||
- Member detector is not portable [\#166](https://github.com/nlohmann/json/issues/166)
|
||||
- Unnecessary const\_cast [\#162](https://github.com/nlohmann/json/issues/162)
|
||||
- Question about get\_ref\(\) [\#128](https://github.com/nlohmann/json/issues/128)
|
||||
- range based for loop for objects [\#83](https://github.com/nlohmann/json/issues/83)
|
||||
- Consider submitting this to the Boost Library Incubator [\#66](https://github.com/nlohmann/json/issues/66)
|
||||
|
||||
- Fixed Issue \#186 - add strto\(f|d|ld\) overload wrappers, "-0.0" special case and FP trailing zero [\#191](https://github.com/nlohmann/json/pull/191) ([twelsby](https://github.com/twelsby))
|
||||
- Issue \#185 - remove approx\(\) and use \#pragma to kill warnings [\#190](https://github.com/nlohmann/json/pull/190) ([twelsby](https://github.com/twelsby))
|
||||
- Fixed Issue \#171 - added two extra template overloads of operator\[\] for T\* arguments [\#189](https://github.com/nlohmann/json/pull/189) ([twelsby](https://github.com/twelsby))
|
||||
- Fixed issue \#167 - removed operator ValueType\(\) condition for VS2015 [\#188](https://github.com/nlohmann/json/pull/188) ([twelsby](https://github.com/twelsby))
|
||||
- Implementation of get\_ref\(\) [\#184](https://github.com/nlohmann/json/pull/184) ([dariomt](https://github.com/dariomt))
|
||||
- Fixed some typos in CONTRIBUTING.md [\#182](https://github.com/nlohmann/json/pull/182) ([nibroc](https://github.com/nibroc))
|
||||
|
||||
## [v1.0.0](https://github.com/nlohmann/json/releases/tag/v1.0.0) (2015-12-27)
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v1.0.0-rc1...v1.0.0)
|
||||
|
||||
- add key name to exception [\#160](https://github.com/nlohmann/json/issues/160)
|
||||
- prevent json.hpp from emitting compiler warnings [\#154](https://github.com/nlohmann/json/issues/154)
|
||||
- json::parse\(string\) does not check utf8 bom [\#152](https://github.com/nlohmann/json/issues/152)
|
||||
- unsigned 64bit values output as signed [\#151](https://github.com/nlohmann/json/issues/151)
|
||||
- Wish feature: json5 [\#150](https://github.com/nlohmann/json/issues/150)
|
||||
- overload of at\(\) with default value [\#133](https://github.com/nlohmann/json/issues/133)
|
||||
- Memory leak in face of exceptions [\#118](https://github.com/nlohmann/json/issues/118)
|
||||
- Find and Count for arrays [\#117](https://github.com/nlohmann/json/issues/117)
|
||||
- dynamically constructing an arbitrarily nested object [\#114](https://github.com/nlohmann/json/issues/114)
|
||||
- object field accessors [\#103](https://github.com/nlohmann/json/issues/103)
|
||||
- v8pp and json [\#95](https://github.com/nlohmann/json/issues/95)
|
||||
- Wishlist [\#65](https://github.com/nlohmann/json/issues/65)
|
||||
- Windows/Visual Studio \(through 2013\) is unsupported [\#62](https://github.com/nlohmann/json/issues/62)
|
||||
|
||||
- Bug in basic\_json::operator\[\] const overload [\#135](https://github.com/nlohmann/json/issues/135)
|
||||
- wrong enable\_if for const pointer \(instead of pointer-to-const\) [\#134](https://github.com/nlohmann/json/issues/134)
|
||||
- Visual Studio 14 Debug assertion failed [\#125](https://github.com/nlohmann/json/issues/125)
|
||||
- Compile error with g++ 4.9.3 cygwin 64-bit [\#112](https://github.com/nlohmann/json/issues/112)
|
||||
- error: unterminated raw string [\#109](https://github.com/nlohmann/json/issues/109)
|
||||
- \[clang-3.6.2\] string/sstream with number to json issue [\#107](https://github.com/nlohmann/json/issues/107)
|
||||
|
||||
- Getting member discarding qualifyer [\#159](https://github.com/nlohmann/json/issues/159)
|
||||
- basic\_json::iterator::value\(\) output includes quotes while basic\_json::iterator::key\(\) doesn't [\#158](https://github.com/nlohmann/json/issues/158)
|
||||
- Indexing `const basic\_json\<\>` with `const basic\_string\<char\>` [\#157](https://github.com/nlohmann/json/issues/157)
|
||||
- token\_type\_name\(token\_type t\): not all control paths return a value [\#156](https://github.com/nlohmann/json/issues/156)
|
||||
- prevent json.hpp from emitting compiler warnings [\#154](https://github.com/nlohmann/json/issues/154)
|
||||
- json::parse\(string\) does not check utf8 bom [\#152](https://github.com/nlohmann/json/issues/152)
|
||||
- unsigned 64bit values output as signed [\#151](https://github.com/nlohmann/json/issues/151)
|
||||
- Wish feature: json5 [\#150](https://github.com/nlohmann/json/issues/150)
|
||||
- Unable to compile on MSVC 2015 with SDL checking enabled: This function or variable may be unsafe. [\#149](https://github.com/nlohmann/json/issues/149)
|
||||
- "Json Object" type does not keep object order [\#148](https://github.com/nlohmann/json/issues/148)
|
||||
- dump\(\) convert strings encoded by utf-8 to shift-jis on windows 10. [\#147](https://github.com/nlohmann/json/issues/147)
|
||||
- Unable to get field names in a json object [\#145](https://github.com/nlohmann/json/issues/145)
|
||||
- Question: Is the use of incomplete type correct? [\#138](https://github.com/nlohmann/json/issues/138)
|
||||
- json.hpp:5746:32: error: 'to\_string' is not a member of 'std' [\#136](https://github.com/nlohmann/json/issues/136)
|
||||
- Bug in basic\_json::operator\[\] const overload [\#135](https://github.com/nlohmann/json/issues/135)
|
||||
- wrong enable\_if for const pointer \(instead of pointer-to-const\) [\#134](https://github.com/nlohmann/json/issues/134)
|
||||
- overload of at\(\) with default value [\#133](https://github.com/nlohmann/json/issues/133)
|
||||
- Splitting source [\#132](https://github.com/nlohmann/json/issues/132)
|
||||
- Question about get\_ptr\(\) [\#127](https://github.com/nlohmann/json/issues/127)
|
||||
- Visual Studio 14 Debug assertion failed [\#125](https://github.com/nlohmann/json/issues/125)
|
||||
- Memory leak in face of exceptions [\#118](https://github.com/nlohmann/json/issues/118)
|
||||
- Find and Count for arrays [\#117](https://github.com/nlohmann/json/issues/117)
|
||||
- dynamically constructing an arbitrarily nested object [\#114](https://github.com/nlohmann/json/issues/114)
|
||||
- Returning any data type [\#113](https://github.com/nlohmann/json/issues/113)
|
||||
- Compile error with g++ 4.9.3 cygwin 64-bit [\#112](https://github.com/nlohmann/json/issues/112)
|
||||
- insert json array issue with gcc4.8.2 [\#110](https://github.com/nlohmann/json/issues/110)
|
||||
- error: unterminated raw string [\#109](https://github.com/nlohmann/json/issues/109)
|
||||
- vector\<json\> copy constructor really weird [\#108](https://github.com/nlohmann/json/issues/108)
|
||||
- \[clang-3.6.2\] string/sstream with number to json issue [\#107](https://github.com/nlohmann/json/issues/107)
|
||||
- maintaining order of keys during iteration [\#106](https://github.com/nlohmann/json/issues/106)
|
||||
- object field accessors [\#103](https://github.com/nlohmann/json/issues/103)
|
||||
- v8pp and json [\#95](https://github.com/nlohmann/json/issues/95)
|
||||
- Wishlist [\#65](https://github.com/nlohmann/json/issues/65)
|
||||
- Windows/Visual Studio \(through 2013\) is unsupported [\#62](https://github.com/nlohmann/json/issues/62)
|
||||
|
||||
- Replace sprintf with hex function, this fixes \#149 [\#153](https://github.com/nlohmann/json/pull/153) ([whackashoe](https://github.com/whackashoe))
|
||||
- Fix character skipping after a surrogate pair [\#146](https://github.com/nlohmann/json/pull/146) ([robertmrk](https://github.com/robertmrk))
|
||||
@@ -175,65 +811,71 @@ All notable changes to this project will be documented in this file. This projec
|
||||
- Use the right variable name in doc string [\#115](https://github.com/nlohmann/json/pull/115) ([whoshuu](https://github.com/whoshuu))
|
||||
|
||||
## [v1.0.0-rc1](https://github.com/nlohmann/json/releases/tag/v1.0.0-rc1) (2015-07-26)
|
||||
- Finish documenting the public interface in Doxygen [\#102](https://github.com/nlohmann/json/issues/102)
|
||||
- Binary string causes numbers to be dumped as hex [\#101](https://github.com/nlohmann/json/issues/101)
|
||||
- failed to iterator json object with reverse\_iterator [\#100](https://github.com/nlohmann/json/issues/100)
|
||||
- 'noexcept' : unknown override specifier [\#99](https://github.com/nlohmann/json/issues/99)
|
||||
- json float parsing problem [\#98](https://github.com/nlohmann/json/issues/98)
|
||||
- Adjust wording to JSON RFC [\#97](https://github.com/nlohmann/json/issues/97)
|
||||
- 17 MB / 90 MB repo size!? [\#96](https://github.com/nlohmann/json/issues/96)
|
||||
- static analysis warnings [\#94](https://github.com/nlohmann/json/issues/94)
|
||||
- reverse\_iterator operator inheritance problem [\#93](https://github.com/nlohmann/json/issues/93)
|
||||
- init error [\#92](https://github.com/nlohmann/json/issues/92)
|
||||
- access by \(const\) reference [\#91](https://github.com/nlohmann/json/issues/91)
|
||||
- is\_integer and is\_float tests [\#90](https://github.com/nlohmann/json/issues/90)
|
||||
- Nonstandard integer type [\#89](https://github.com/nlohmann/json/issues/89)
|
||||
- static library build [\#84](https://github.com/nlohmann/json/issues/84)
|
||||
- lexer::get\_number return NAN [\#82](https://github.com/nlohmann/json/issues/82)
|
||||
- MinGW have no std::to\_string [\#80](https://github.com/nlohmann/json/issues/80)
|
||||
- Incorrect behaviour of basic\_json::count method [\#78](https://github.com/nlohmann/json/issues/78)
|
||||
- Invoking is\_array\(\) function creates "null" value [\#77](https://github.com/nlohmann/json/issues/77)
|
||||
- dump\(\) / parse\(\) not idempotent [\#76](https://github.com/nlohmann/json/issues/76)
|
||||
- Handle infinity and NaN cases [\#70](https://github.com/nlohmann/json/issues/70)
|
||||
- errors in g++-4.8.1 [\#68](https://github.com/nlohmann/json/issues/68)
|
||||
- Keys when iterating over objects [\#67](https://github.com/nlohmann/json/issues/67)
|
||||
- Compilation results in tons of warnings [\#64](https://github.com/nlohmann/json/issues/64)
|
||||
- Complete brief documentation [\#61](https://github.com/nlohmann/json/issues/61)
|
||||
- Double quotation mark is not parsed correctly [\#60](https://github.com/nlohmann/json/issues/60)
|
||||
- Get coverage back to 100% [\#58](https://github.com/nlohmann/json/issues/58)
|
||||
- erase elements using iterators [\#57](https://github.com/nlohmann/json/issues/57)
|
||||
- Removing item from array [\#56](https://github.com/nlohmann/json/issues/56)
|
||||
- Serialize/Deserialize like PHP? [\#55](https://github.com/nlohmann/json/issues/55)
|
||||
- Numbers as keys [\#54](https://github.com/nlohmann/json/issues/54)
|
||||
- Why are elements alphabetized on key while iterating? [\#53](https://github.com/nlohmann/json/issues/53)
|
||||
- Document erase, count, and iterators key and value [\#52](https://github.com/nlohmann/json/issues/52)
|
||||
- Do not use std::to\_string [\#51](https://github.com/nlohmann/json/issues/51)
|
||||
- Supported compilers [\#50](https://github.com/nlohmann/json/issues/50)
|
||||
- Confused about iterating through json objects [\#49](https://github.com/nlohmann/json/issues/49)
|
||||
- Use non-member begin/end [\#48](https://github.com/nlohmann/json/issues/48)
|
||||
- Erase key [\#47](https://github.com/nlohmann/json/issues/47)
|
||||
- Key iterator [\#46](https://github.com/nlohmann/json/issues/46)
|
||||
- Add count member function [\#45](https://github.com/nlohmann/json/issues/45)
|
||||
- Printing attribute names [\#39](https://github.com/nlohmann/json/issues/39)
|
||||
- Avoid using spaces when encoding without pretty print [\#31](https://github.com/nlohmann/json/issues/31)
|
||||
- Cannot encode long numbers [\#30](https://github.com/nlohmann/json/issues/30)
|
||||
- Creating an empty array [\#27](https://github.com/nlohmann/json/issues/27)
|
||||
- Custom allocator support [\#25](https://github.com/nlohmann/json/issues/25)
|
||||
- create a header-only version [\#16](https://github.com/nlohmann/json/issues/16)
|
||||
- Add to\_string overload for indentation [\#13](https://github.com/nlohmann/json/issues/13)
|
||||
- move code into namespace [\#9](https://github.com/nlohmann/json/issues/9)
|
||||
- free functions for explicit objects and arrays in initializer lists [\#8](https://github.com/nlohmann/json/issues/8)
|
||||
- Test case coverage [\#2](https://github.com/nlohmann/json/issues/2)
|
||||
- Parse streams incrementally. [\#40](https://github.com/nlohmann/json/pull/40) ([aburgh](https://github.com/aburgh))
|
||||
|
||||
- Binary string causes numbers to be dumped as hex [\#101](https://github.com/nlohmann/json/issues/101)
|
||||
- failed to iterator json object with reverse\_iterator [\#100](https://github.com/nlohmann/json/issues/100)
|
||||
- static analysis warnings [\#94](https://github.com/nlohmann/json/issues/94)
|
||||
- reverse\_iterator operator inheritance problem [\#93](https://github.com/nlohmann/json/issues/93)
|
||||
- Nonstandard integer type [\#89](https://github.com/nlohmann/json/issues/89)
|
||||
- lexer::get\_number return NAN [\#82](https://github.com/nlohmann/json/issues/82)
|
||||
- Handle infinity and NaN cases [\#70](https://github.com/nlohmann/json/issues/70)
|
||||
- errors in g++-4.8.1 [\#68](https://github.com/nlohmann/json/issues/68)
|
||||
- Double quotation mark is not parsed correctly [\#60](https://github.com/nlohmann/json/issues/60)
|
||||
- Do not use std::to\_string [\#51](https://github.com/nlohmann/json/issues/51)
|
||||
- Confused about iterating through json objects [\#49](https://github.com/nlohmann/json/issues/49)
|
||||
- Problem getting vector \(array\) of strings [\#44](https://github.com/nlohmann/json/issues/44)
|
||||
- Compilation error due to assuming that private=public [\#43](https://github.com/nlohmann/json/issues/43)
|
||||
- Use of deprecated implicit copy constructor [\#42](https://github.com/nlohmann/json/issues/42)
|
||||
- Printing attribute names [\#39](https://github.com/nlohmann/json/issues/39)
|
||||
- dumping a small number\_float just outputs 0.000000 [\#37](https://github.com/nlohmann/json/issues/37)
|
||||
- find is error [\#32](https://github.com/nlohmann/json/issues/32)
|
||||
- Avoid using spaces when encoding without pretty print [\#31](https://github.com/nlohmann/json/issues/31)
|
||||
- Cannot encode long numbers [\#30](https://github.com/nlohmann/json/issues/30)
|
||||
- segmentation fault when iterating over empty arrays/objects [\#28](https://github.com/nlohmann/json/issues/28)
|
||||
- Creating an empty array [\#27](https://github.com/nlohmann/json/issues/27)
|
||||
- Custom allocator support [\#25](https://github.com/nlohmann/json/issues/25)
|
||||
- make the type of the used string container customizable [\#20](https://github.com/nlohmann/json/issues/20)
|
||||
- Improper parsing of JSON string "\\" [\#17](https://github.com/nlohmann/json/issues/17)
|
||||
- create a header-only version [\#16](https://github.com/nlohmann/json/issues/16)
|
||||
- Don't return "const values" [\#15](https://github.com/nlohmann/json/issues/15)
|
||||
- Add to\_string overload for indentation [\#13](https://github.com/nlohmann/json/issues/13)
|
||||
- string parser does not recognize uncompliant strings [\#12](https://github.com/nlohmann/json/issues/12)
|
||||
- free functions for explicit objects and arrays in initializer lists [\#8](https://github.com/nlohmann/json/issues/8)
|
||||
- Runtime error in Travis job [\#1](https://github.com/nlohmann/json/issues/1)
|
||||
- Fix compilation of json\_unit with GCC 5 [\#59](https://github.com/nlohmann/json/pull/59) ([dkopecek](https://github.com/dkopecek))
|
||||
|
||||
- Finish documenting the public interface in Doxygen [\#102](https://github.com/nlohmann/json/issues/102)
|
||||
- 'noexcept' : unknown override specifier [\#99](https://github.com/nlohmann/json/issues/99)
|
||||
- Keys when iterating over objects [\#67](https://github.com/nlohmann/json/issues/67)
|
||||
- Complete brief documentation [\#61](https://github.com/nlohmann/json/issues/61)
|
||||
- Get coverage back to 100% [\#58](https://github.com/nlohmann/json/issues/58)
|
||||
- possible double-free in find function [\#11](https://github.com/nlohmann/json/issues/11)
|
||||
- UTF-8 encoding/deconding/testing [\#10](https://github.com/nlohmann/json/issues/10)
|
||||
- move code into namespace [\#9](https://github.com/nlohmann/json/issues/9)
|
||||
- free functions for explicit objects and arrays in initializer lists [\#8](https://github.com/nlohmann/json/issues/8)
|
||||
- unique\_ptr for ownership [\#7](https://github.com/nlohmann/json/issues/7)
|
||||
- Add unit tests [\#4](https://github.com/nlohmann/json/issues/4)
|
||||
- Drop C++98 support [\#3](https://github.com/nlohmann/json/issues/3)
|
||||
- Test case coverage [\#2](https://github.com/nlohmann/json/issues/2)
|
||||
- Runtime error in Travis job [\#1](https://github.com/nlohmann/json/issues/1)
|
||||
|
||||
- Keyword 'inline' is useless when member functions are defined in headers [\#87](https://github.com/nlohmann/json/pull/87) ([ahamez](https://github.com/ahamez))
|
||||
- Remove useless typename [\#86](https://github.com/nlohmann/json/pull/86) ([ahamez](https://github.com/ahamez))
|
||||
@@ -243,6 +885,8 @@ All notable changes to this project will be documented in this file. This projec
|
||||
- support enum [\#71](https://github.com/nlohmann/json/pull/71) ([likebeta](https://github.com/likebeta))
|
||||
- Fix performance regression introduced with the parsing callback feature. [\#69](https://github.com/nlohmann/json/pull/69) ([aburgh](https://github.com/aburgh))
|
||||
- Improve the implementations of the comparission-operators [\#63](https://github.com/nlohmann/json/pull/63) ([Florianjw](https://github.com/Florianjw))
|
||||
- Fix compilation of json\_unit with GCC 5 [\#59](https://github.com/nlohmann/json/pull/59) ([dkopecek](https://github.com/dkopecek))
|
||||
- Parse streams incrementally. [\#40](https://github.com/nlohmann/json/pull/40) ([aburgh](https://github.com/aburgh))
|
||||
- Feature/small float serialization [\#38](https://github.com/nlohmann/json/pull/38) ([jrandall](https://github.com/jrandall))
|
||||
- template version with re2c scanner [\#36](https://github.com/nlohmann/json/pull/36) ([nlohmann](https://github.com/nlohmann))
|
||||
- more descriptive documentation in example [\#33](https://github.com/nlohmann/json/pull/33) ([luxe](https://github.com/luxe))
|
||||
|
||||
17
LICENSE.MIT
17
LICENSE.MIT
@@ -1,14 +1,13 @@
|
||||
The library is licensed under the MIT License
|
||||
<http://opensource.org/licenses/MIT>:
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2013-2016 Niels Lohmann
|
||||
Copyright (c) 2013-2017 Niels Lohmann
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
209
Makefile
209
Makefile
@@ -1,18 +1,20 @@
|
||||
.PHONY: pretty clean ChangeLog.md
|
||||
|
||||
# used programs
|
||||
RE2C = re2c
|
||||
SED = sed
|
||||
|
||||
# main target
|
||||
all: json_unit
|
||||
|
||||
# clean up
|
||||
clean:
|
||||
rm -fr json_unit json_benchmarks fuzz fuzz-testing *.dSYM
|
||||
rm -fr benchmarks/files/numbers/*.json
|
||||
$(MAKE) clean -Cdoc
|
||||
$(MAKE) clean -Ctest
|
||||
all:
|
||||
@echo "ChangeLog.md - generate ChangeLog file"
|
||||
@echo "check - compile and execute test suite"
|
||||
@echo "check-fast - compile and execute test suite (skip long-running tests)"
|
||||
@echo "clean - remove built files"
|
||||
@echo "coverage - create coverage information with lcov"
|
||||
@echo "cppcheck - analyze code with cppcheck"
|
||||
@echo "doctest - compile example files and check their output"
|
||||
@echo "fuzz_testing - prepare fuzz testing of the JSON parser"
|
||||
@echo "fuzz_testing_cbor - prepare fuzz testing of the CBOR parser"
|
||||
@echo "fuzz_testing_msgpack - prepare fuzz testing of the MessagePack parser"
|
||||
@echo "json_unit - create single-file test executable"
|
||||
@echo "pedantic_clang - run Clang with maximal warning flags"
|
||||
@echo "pedantic_gcc - run GCC with maximal warning flags"
|
||||
@echo "pretty - beautify code with Artistic Style"
|
||||
|
||||
|
||||
##########################################################################
|
||||
@@ -21,14 +23,36 @@ clean:
|
||||
|
||||
# build unit tests
|
||||
json_unit:
|
||||
@$(MAKE) -C test
|
||||
@$(MAKE) json_unit -C test
|
||||
|
||||
# run unit tests
|
||||
check: json_unit
|
||||
test/json_unit "*"
|
||||
check:
|
||||
$(MAKE) check -C test
|
||||
|
||||
check-fast: json_unit
|
||||
test/json_unit
|
||||
check-fast:
|
||||
$(MAKE) check -C test TEST_PATTERN=""
|
||||
|
||||
# clean up
|
||||
clean:
|
||||
rm -fr json_unit json_benchmarks fuzz fuzz-testing *.dSYM test/*.dSYM
|
||||
rm -fr benchmarks/files/numbers/*.json
|
||||
rm -fr build_coverage
|
||||
$(MAKE) clean -Cdoc
|
||||
$(MAKE) clean -Ctest
|
||||
$(MAKE) clean -Cbenchmarks
|
||||
|
||||
|
||||
##########################################################################
|
||||
# coverage
|
||||
##########################################################################
|
||||
|
||||
coverage:
|
||||
mkdir build_coverage
|
||||
cd build_coverage ; CXX=g++-5 cmake .. -GNinja -DJSON_Coverage=ON
|
||||
cd build_coverage ; ninja
|
||||
cd build_coverage ; ctest
|
||||
cd build_coverage ; ninja lcov_html
|
||||
open build_coverage/test/html/index.html
|
||||
|
||||
|
||||
##########################################################################
|
||||
@@ -40,6 +64,97 @@ doctest:
|
||||
$(MAKE) check_output -C doc
|
||||
|
||||
|
||||
##########################################################################
|
||||
# warning detector
|
||||
##########################################################################
|
||||
|
||||
# calling Clang with all warnings, except:
|
||||
# -Wno-documentation-unknown-command: code uses user-defined commands like @complexity
|
||||
# -Wno-exit-time-destructors: warning in Catch code
|
||||
# -Wno-keyword-macro: unit-tests use "#define private public"
|
||||
# -Wno-deprecated-declarations: the library deprecated some functions
|
||||
# -Wno-weak-vtables: exception class is defined inline, but has virtual method
|
||||
# -Wno-range-loop-analysis: iterator_wrapper tests "for(const auto i...)"
|
||||
# -Wno-float-equal: not all comparisons in the tests can be replaced by Approx
|
||||
# -Wno-switch-enum -Wno-covered-switch-default: pedantic/contradicting warnings about switches
|
||||
# -Wno-padded: padding is nothing to warn about
|
||||
pedantic_clang:
|
||||
$(MAKE) json_unit CXXFLAGS="\
|
||||
-std=c++11 -Wno-c++98-compat -Wno-c++98-compat-pedantic \
|
||||
-Werror \
|
||||
-Weverything \
|
||||
-Wno-documentation-unknown-command \
|
||||
-Wno-exit-time-destructors \
|
||||
-Wno-keyword-macro \
|
||||
-Wno-deprecated-declarations \
|
||||
-Wno-weak-vtables \
|
||||
-Wno-range-loop-analysis \
|
||||
-Wno-float-equal \
|
||||
-Wno-switch-enum -Wno-covered-switch-default \
|
||||
-Wno-padded"
|
||||
|
||||
# calling GCC with most warnings
|
||||
pedantic_gcc:
|
||||
$(MAKE) json_unit CXXFLAGS="\
|
||||
-std=c++11 \
|
||||
-Wno-deprecated-declarations \
|
||||
-Werror \
|
||||
-Wall -Wpedantic -Wextra \
|
||||
-Walloca \
|
||||
-Warray-bounds=2 \
|
||||
-Wcast-qual -Wcast-align \
|
||||
-Wchar-subscripts \
|
||||
-Wconditionally-supported \
|
||||
-Wconversion \
|
||||
-Wdate-time \
|
||||
-Wdeprecated \
|
||||
-Wdisabled-optimization \
|
||||
-Wdouble-promotion \
|
||||
-Wduplicated-branches \
|
||||
-Wduplicated-cond \
|
||||
-Wformat-overflow=2 \
|
||||
-Wformat-signedness \
|
||||
-Wformat-truncation=2 \
|
||||
-Wformat=2 \
|
||||
-Wno-ignored-qualifiers \
|
||||
-Wimplicit-fallthrough=5 \
|
||||
-Wlogical-op \
|
||||
-Wmissing-declarations \
|
||||
-Wmissing-format-attribute \
|
||||
-Wmissing-include-dirs \
|
||||
-Wnoexcept \
|
||||
-Wnonnull \
|
||||
-Wnull-dereference \
|
||||
-Wold-style-cast \
|
||||
-Woverloaded-virtual \
|
||||
-Wparentheses \
|
||||
-Wplacement-new=2 \
|
||||
-Wredundant-decls \
|
||||
-Wreorder \
|
||||
-Wrestrict \
|
||||
-Wshadow=global \
|
||||
-Wshift-overflow=2 \
|
||||
-Wsign-conversion \
|
||||
-Wsign-promo \
|
||||
-Wsized-deallocation \
|
||||
-Wstrict-overflow=5 \
|
||||
-Wsuggest-attribute=const \
|
||||
-Wsuggest-attribute=format \
|
||||
-Wsuggest-attribute=noreturn \
|
||||
-Wsuggest-attribute=pure \
|
||||
-Wsuggest-final-methods \
|
||||
-Wsuggest-final-types \
|
||||
-Wsuggest-override \
|
||||
-Wtrigraphs \
|
||||
-Wundef \
|
||||
-Wuninitialized -Wunknown-pragmas \
|
||||
-Wunused \
|
||||
-Wunused-const-variable=2 \
|
||||
-Wunused-macros \
|
||||
-Wunused-parameter \
|
||||
-Wuseless-cast \
|
||||
-Wvariadic-macros"
|
||||
|
||||
##########################################################################
|
||||
# fuzzing
|
||||
##########################################################################
|
||||
@@ -48,15 +163,40 @@ doctest:
|
||||
fuzz_testing:
|
||||
rm -fr fuzz-testing
|
||||
mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out
|
||||
$(MAKE) fuzz CXX=afl-clang++
|
||||
mv fuzz fuzz-testing
|
||||
$(MAKE) parse_afl_fuzzer -C test CXX=afl-clang++
|
||||
mv test/parse_afl_fuzzer fuzz-testing/fuzzer
|
||||
find test/data/json_tests -size -5k -name *json | xargs -I{} cp "{}" fuzz-testing/testcases
|
||||
@echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzz"
|
||||
@echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer"
|
||||
|
||||
# the fuzzer binary
|
||||
fuzz: test/src/fuzz.cpp src/json.hpp
|
||||
$(CXX) -std=c++11 $(CXXFLAGS) $(FLAGS) $(CPPFLAGS) -I src $< $(LDFLAGS) -o $@
|
||||
fuzz_testing_cbor:
|
||||
rm -fr fuzz-testing
|
||||
mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out
|
||||
$(MAKE) parse_cbor_fuzzer -C test CXX=afl-clang++
|
||||
mv test/parse_cbor_fuzzer fuzz-testing/fuzzer
|
||||
find test/data -size -5k -name *.cbor | xargs -I{} cp "{}" fuzz-testing/testcases
|
||||
@echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer"
|
||||
|
||||
fuzz_testing_msgpack:
|
||||
rm -fr fuzz-testing
|
||||
mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out
|
||||
$(MAKE) parse_msgpack_fuzzer -C test CXX=afl-clang++
|
||||
mv test/parse_msgpack_fuzzer fuzz-testing/fuzzer
|
||||
find test/data -size -5k -name *.msgpack | xargs -I{} cp "{}" fuzz-testing/testcases
|
||||
@echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer"
|
||||
|
||||
fuzzing-start:
|
||||
afl-fuzz -S fuzzer1 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null &
|
||||
afl-fuzz -S fuzzer2 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null &
|
||||
afl-fuzz -S fuzzer3 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null &
|
||||
afl-fuzz -S fuzzer4 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null &
|
||||
afl-fuzz -S fuzzer5 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null &
|
||||
afl-fuzz -S fuzzer6 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null &
|
||||
afl-fuzz -S fuzzer7 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null &
|
||||
afl-fuzz -M fuzzer0 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer
|
||||
|
||||
fuzzing-stop:
|
||||
-killall fuzzer
|
||||
-killall afl-fuzz
|
||||
|
||||
##########################################################################
|
||||
# static analyzer
|
||||
@@ -66,17 +206,11 @@ fuzz: test/src/fuzz.cpp src/json.hpp
|
||||
cppcheck:
|
||||
cppcheck --enable=warning --inconclusive --force --std=c++11 src/json.hpp --error-exitcode=1
|
||||
|
||||
clang_sanitize: clean
|
||||
CXX=clang++ CXXFLAGS="-g -O2 -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" $(MAKE)
|
||||
|
||||
##########################################################################
|
||||
# maintainer targets
|
||||
##########################################################################
|
||||
|
||||
# create scanner with re2c
|
||||
re2c: src/json.hpp.re2c
|
||||
$(RE2C) -W --bit-vectors --nested-ifs --no-debug-info $< | $(SED) '1d' > src/json.hpp
|
||||
|
||||
# pretty printer
|
||||
pretty:
|
||||
astyle --style=allman --indent=spaces=4 --indent-modifiers \
|
||||
@@ -84,19 +218,8 @@ pretty:
|
||||
--indent-col1-comments --pad-oper --pad-header --align-pointer=type \
|
||||
--align-reference=type --add-brackets --convert-tabs --close-templates \
|
||||
--lineend=linux --preserve-date --suffix=none --formatted \
|
||||
src/json.hpp src/json.hpp.re2c test/src/*.cpp \
|
||||
benchmarks/benchmarks.cpp doc/examples/*.cpp
|
||||
|
||||
|
||||
##########################################################################
|
||||
# benchmarks
|
||||
##########################################################################
|
||||
|
||||
# benchmarks
|
||||
json_benchmarks: benchmarks/benchmarks.cpp benchmarks/benchpress.hpp benchmarks/cxxopts.hpp src/json.hpp
|
||||
cd benchmarks/files/numbers ; python generate.py
|
||||
$(CXX) -std=c++11 $(CXXFLAGS) -DNDEBUG -O3 -flto -I src -I benchmarks $< $(LDFLAGS) -o $@
|
||||
./json_benchmarks
|
||||
src/json.hpp test/src/*.cpp \
|
||||
benchmarks/src/benchmarks.cpp doc/examples/*.cpp
|
||||
|
||||
|
||||
##########################################################################
|
||||
|
||||
550
README.md
550
README.md
@@ -3,18 +3,41 @@
|
||||
[](https://travis-ci.org/nlohmann/json)
|
||||
[](https://ci.appveyor.com/project/nlohmann/json)
|
||||
[](https://coveralls.io/r/nlohmann/json)
|
||||
[](http://melpon.org/wandbox/permlink/r3wa3rI5yxgQQcrm)
|
||||
[](https://scan.coverity.com/projects/nlohmann-json)
|
||||
[](https://www.codacy.com/app/nlohmann/json?utm_source=github.com&utm_medium=referral&utm_content=nlohmann/json&utm_campaign=Badge_Grade)
|
||||
[](https://wandbox.org/permlink/Op57X0V7fTf2tdwl)
|
||||
[](http://nlohmann.github.io/json)
|
||||
[](https://raw.githubusercontent.com/nlohmann/json/master/LICENSE.MIT)
|
||||
[](https://github.com/nlohmann/json/releases)
|
||||
[](http://github.com/nlohmann/json/issues)
|
||||
[](http://isitmaintained.com/project/nlohmann/json "Average time to resolve an issue")
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/289)
|
||||
|
||||
- [Design goals](#design-goals)
|
||||
- [Integration](#integration)
|
||||
- [Examples](#examples)
|
||||
- [JSON as first-class data type](#json-as-first-class-data-type)
|
||||
- [Serialization / Deserialization](#serialization--deserialization)
|
||||
- [STL-like access](#stl-like-access)
|
||||
- [Conversion from STL containers](#conversion-from-stl-containers)
|
||||
- [JSON Pointer and JSON Patch](#json-pointer-and-json-patch)
|
||||
- [Implicit conversions](#implicit-conversions)
|
||||
- [Conversions to/from arbitrary types](#arbitrary-types-conversions)
|
||||
- [Binary formats (CBOR and MessagePack)](#binary-formats-cbor-and-messagepack)
|
||||
- [Supported compilers](#supported-compilers)
|
||||
- [License](#license)
|
||||
- [Contact](#contact)
|
||||
- [Thanks](#thanks)
|
||||
- [Used third-party tools](#used-third-party-tools)
|
||||
- [Projects using JSON for Modern C++](#projects-using-json-for-modern-c)
|
||||
- [Notes](#notes)
|
||||
- [Execute unit tests](#execute-unit-tests)
|
||||
|
||||
## Design goals
|
||||
|
||||
There are myriads of [JSON](http://json.org) libraries out there, and each may even have its reason to exist. Our class had these design goals:
|
||||
|
||||
- **Intuitive syntax**. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. Check out the [examples below](#examples) and you know, what I mean.
|
||||
- **Intuitive syntax**. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. Check out the [examples below](#examples) and you'll know what I mean.
|
||||
|
||||
- **Trivial integration**. Our whole code consists of a single header file [`json.hpp`](https://github.com/nlohmann/json/blob/develop/src/json.hpp). That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.
|
||||
|
||||
@@ -24,7 +47,7 @@ Other aspects were not so important to us:
|
||||
|
||||
- **Memory efficiency**. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: `std::string` for strings, `int64_t`, `uint64_t` or `double` for numbers, `std::map` for objects, `std::vector` for arrays, and `bool` for Booleans. However, you can template the generalized class `basic_json` to your needs.
|
||||
|
||||
- **Speed**. We currently implement the parser as naive [recursive descent parser](http://en.wikipedia.org/wiki/Recursive_descent_parser) with hand coded string handling. It is fast enough, but a [LALR-parser](http://en.wikipedia.org/wiki/LALR_parser) may be even faster (but would consist of more files which makes the integration harder).
|
||||
- **Speed**. There are certainly [faster JSON libraries](https://github.com/miloyip/nativejson-benchmark#parsing-time) out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a `std::vector` or `std::map`, you are already set.
|
||||
|
||||
See the [contribution guidelines](https://github.com/nlohmann/json/blob/master/.github/CONTRIBUTING.md#please-dont) for more information.
|
||||
|
||||
@@ -44,9 +67,21 @@ to the files you want to use JSON objects. That's it. Do not forget to set the n
|
||||
|
||||
:beer: If you are using OS X and [Homebrew](http://brew.sh), just type `brew tap nlohmann/json` and `brew install nlohmann_json` and you're set. If you want the bleeding edge rather than the latest release, use `brew install nlohmann_json --HEAD`.
|
||||
|
||||
If you are using the [Meson Build System](http://mesonbuild.com), then you can wrap this repo as a subproject.
|
||||
|
||||
If you are using [Conan](https://www.conan.io/) to manage your dependencies, merely add `jsonformoderncpp/x.y.z@vthiery/stable` to your `conanfile.py`'s requires, where `x.y.z` is the release version you want to use. Please file issues [here](https://github.com/vthiery/conan-jsonformoderncpp/issues) if you experience problems with the packages.
|
||||
|
||||
If you are using [hunter](https://github.com/ruslo/hunter/) on your project for external dependencies, then you can use the [nlohmann_json package](https://docs.hunter.sh/en/latest/packages/pkg/nlohmann_json.html). Please see the hunter project for any issues regarding the packaging.
|
||||
|
||||
If you are using [vcpkg](https://github.com/Microsoft/vcpkg/) on your project for external dependencies, then you can use the [nlohmann-json package](https://github.com/Microsoft/vcpkg/tree/master/ports/nlohmann-json). Please see the vcpkg project for any issues regarding the packaging.
|
||||
|
||||
|
||||
## Examples
|
||||
|
||||
Beside the examples below, you may want to check the [documentation](https://nlohmann.github.io/json/) where each function contains a separate code example (e.g., check out [`emplace()`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a602f275f0359ab181221384989810604.html#a602f275f0359ab181221384989810604)). All [example files](https://github.com/nlohmann/json/tree/develop/doc/examples) can be compiled and executed on their own (e.g., file [emplace.cpp](https://github.com/nlohmann/json/blob/develop/doc/examples/emplace.cpp)).
|
||||
|
||||
### JSON as first-class data type
|
||||
|
||||
Here are some examples to give you an idea how to use the class.
|
||||
|
||||
Assume you want to create the JSON object
|
||||
@@ -123,12 +158,14 @@ json empty_object_implicit = json({});
|
||||
json empty_object_explicit = json::object();
|
||||
|
||||
// a way to express an _array_ of key/value pairs [["currency", "USD"], ["value", 42.99]]
|
||||
json array_not_object = { json::array({"currency", "USD"}), json::array({"value", 42.99}) };
|
||||
json array_not_object = json::array({ {"currency", "USD"}, {"value", 42.99} });
|
||||
```
|
||||
|
||||
|
||||
### Serialization / Deserialization
|
||||
|
||||
#### To/from strings
|
||||
|
||||
You can create an object (deserialization) by appending `_json` to a string literal:
|
||||
|
||||
```cpp
|
||||
@@ -142,8 +179,14 @@ auto j2 = R"(
|
||||
"pi": 3.141
|
||||
}
|
||||
)"_json;
|
||||
```
|
||||
|
||||
// or explicitly
|
||||
Note that without appending the `_json` suffix, the passed string literal is not parsed, but just used as JSON string value. That is, `json j = "{ \"happy\": true, \"pi\": 3.141 }"` would just store the string `"{ "happy": true, "pi": 3.141 }"` rather than parsing the actual object.
|
||||
|
||||
The above example can also be expressed explicitly using `json::parse()`:
|
||||
|
||||
```cpp
|
||||
// parse explicitly
|
||||
auto j3 = json::parse("{ \"happy\": true, \"pi\": 3.141 }");
|
||||
```
|
||||
|
||||
@@ -162,6 +205,31 @@ std::cout << j.dump(4) << std::endl;
|
||||
// }
|
||||
```
|
||||
|
||||
Note the difference between serialization and assignment:
|
||||
|
||||
```cpp
|
||||
// store a string in a JSON value
|
||||
json j_string = "this is a string";
|
||||
|
||||
// retrieve the string value (implicit JSON to std::string conversion)
|
||||
std::string cpp_string = j_string;
|
||||
// retrieve the string value (explicit JSON to std::string conversion)
|
||||
auto cpp_string2 = j_string.get<std::string>();
|
||||
|
||||
// retrieve the serialized value (explicit JSON serialization)
|
||||
std::string serialized_string = j_string.dump();
|
||||
|
||||
// output of original string
|
||||
std::cout << cpp_string << " == " << cpp_string2 << " == " << j_string.get<std::string>() << '\n';
|
||||
// output of serialized value
|
||||
std::cout << j_string << " == " << serialized_string << std::endl;
|
||||
```
|
||||
|
||||
`.dump()` always returns the serialized value, and `.get<std::string>()` returns the originally stored string value.
|
||||
|
||||
|
||||
#### To/from streams (e.g. files, string streams)
|
||||
|
||||
You can also use streams to serialize and deserialize:
|
||||
|
||||
```cpp
|
||||
@@ -176,10 +244,37 @@ std::cout << j;
|
||||
std::cout << std::setw(4) << j << std::endl;
|
||||
```
|
||||
|
||||
These operators work for any subclasses of `std::istream` or `std::ostream`.
|
||||
These operators work for any subclasses of `std::istream` or `std::ostream`. Here is the same example with files:
|
||||
|
||||
```cpp
|
||||
// read a JSON file
|
||||
std::ifstream i("file.json");
|
||||
json j;
|
||||
i >> j;
|
||||
|
||||
// write prettified JSON to another file
|
||||
std::ofstream o("pretty.json");
|
||||
o << std::setw(4) << j << std::endl;
|
||||
```
|
||||
|
||||
Please note that setting the exception bit for `failbit` is inappropriate for this use case. It will result in program termination due to the `noexcept` specifier in use.
|
||||
|
||||
#### Read from iterator range
|
||||
|
||||
You can also read JSON from an iterator range; that is, from any container accessible by iterators whose content is stored as contiguous byte sequence, for instance a `std::vector<std::uint8_t>`:
|
||||
|
||||
```cpp
|
||||
std::vector<std::uint8_t> v = {'t', 'r', 'u', 'e'};
|
||||
json j = json::parse(v.begin(), v.end());
|
||||
```
|
||||
|
||||
You may leave the iterators for the range [begin, end):
|
||||
|
||||
```cpp
|
||||
std::vector<std::uint8_t> v = {'t', 'r', 'u', 'e'};
|
||||
json j = json::parse(v);
|
||||
```
|
||||
|
||||
|
||||
### STL-like access
|
||||
|
||||
@@ -192,6 +287,9 @@ j.push_back("foo");
|
||||
j.push_back(1);
|
||||
j.push_back(true);
|
||||
|
||||
// also use emplace_back
|
||||
j.emplace_back(1.78);
|
||||
|
||||
// iterate the array
|
||||
for (json::iterator it = j.begin(); it != j.end(); ++it) {
|
||||
std::cout << *it << '\n';
|
||||
@@ -207,6 +305,9 @@ const std::string tmp = j[0];
|
||||
j[1] = 42;
|
||||
bool foo = j.at(2);
|
||||
|
||||
// comparison
|
||||
j == "[\"foo\", 1, true]"_json; // true
|
||||
|
||||
// other stuff
|
||||
j.size(); // 3 entries
|
||||
j.empty(); // false
|
||||
@@ -221,15 +322,15 @@ j.is_object();
|
||||
j.is_array();
|
||||
j.is_string();
|
||||
|
||||
// comparison
|
||||
j == "[\"foo\", 1, true]"_json; // true
|
||||
|
||||
// create an object
|
||||
json o;
|
||||
o["foo"] = 23;
|
||||
o["bar"] = false;
|
||||
o["baz"] = 3.141;
|
||||
|
||||
// also use emplace
|
||||
o.emplace("weather", "sunny");
|
||||
|
||||
// special iterator member functions for objects
|
||||
for (json::iterator it = o.begin(); it != o.end(); ++it) {
|
||||
std::cout << it.key() << " : " << it.value() << "\n";
|
||||
@@ -251,7 +352,7 @@ o.erase("foo");
|
||||
|
||||
### Conversion from STL containers
|
||||
|
||||
Any sequence container (`std::array`, `std::vector`, `std::deque`, `std::forward_list`, `std::list`) whose values can be used to construct JSON types (e.g., integers, floating point numbers, Booleans, string types, or again STL containers described in this section) can be used to create a JSON array. The same holds for similar associative containers (`std::set`, `std::multiset`, `std::unordered_set`, `std::unordered_multiset`), but in these cases the order of the elements of the array depends how the elements are ordered in the respective STL container.
|
||||
Any sequence container (`std::array`, `std::vector`, `std::deque`, `std::forward_list`, `std::list`) whose values can be used to construct JSON types (e.g., integers, floating point numbers, Booleans, string types, or again STL containers described in this section) can be used to create a JSON array. The same holds for similar associative containers (`std::set`, `std::multiset`, `std::unordered_set`, `std::unordered_multiset`), but in these cases the order of the elements of the array depends on how the elements are ordered in the respective STL container.
|
||||
|
||||
```cpp
|
||||
std::vector<int> c_vector {1, 2, 3, 4};
|
||||
@@ -283,15 +384,15 @@ json j_uset(c_uset); // only one entry for "one" is used
|
||||
// maybe ["two", "three", "four", "one"]
|
||||
|
||||
std::multiset<std::string> c_mset {"one", "two", "one", "four"};
|
||||
json j_mset(c_mset); // only one entry for "one" is used
|
||||
// maybe ["one", "two", "four"]
|
||||
json j_mset(c_mset); // both entries for "one" are used
|
||||
// maybe ["one", "two", "one", "four"]
|
||||
|
||||
std::unordered_multiset<std::string> c_umset {"one", "two", "one", "four"};
|
||||
json j_umset(c_umset); // both entries for "one" are used
|
||||
// maybe ["one", "two", "one", "four"]
|
||||
```
|
||||
|
||||
Likewise, any associative key-value containers (`std::map`, `std::multimap`, `std::unordered_map`, `std::unordered_multimap`) whose keys can construct an `std::string` and whose values can be used to construct JSON types (see examples above) can be used to to create a JSON object. Note that in case of multimaps only one key is used in the JSON object and the value depends on the internal order of the STL container.
|
||||
Likewise, any associative key-value containers (`std::map`, `std::multimap`, `std::unordered_map`, `std::unordered_multimap`) whose keys can construct an `std::string` and whose values can be used to construct JSON types (see examples above) can be used to create a JSON object. Note that in case of multimaps only one key is used in the JSON object and the value depends on the internal order of the STL container.
|
||||
|
||||
```cpp
|
||||
std::map<std::string, int> c_map { {"one", 1}, {"two", 2}, {"three", 3} };
|
||||
@@ -383,14 +484,266 @@ int vi = jn.get<int>();
|
||||
// etc.
|
||||
```
|
||||
|
||||
### Arbitrary types conversions
|
||||
|
||||
Every type can be serialized in JSON, not just STL-containers and scalar types. Usually, you would do something along those lines:
|
||||
|
||||
```cpp
|
||||
namespace ns {
|
||||
// a simple struct to model a person
|
||||
struct person {
|
||||
std::string name;
|
||||
std::string address;
|
||||
int age;
|
||||
};
|
||||
}
|
||||
|
||||
ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60};
|
||||
|
||||
// convert to JSON: copy each value into the JSON object
|
||||
json j;
|
||||
j["name"] = p.name;
|
||||
j["address"] = p.address;
|
||||
j["age"] = p.age;
|
||||
|
||||
// ...
|
||||
|
||||
// convert from JSON: copy each value from the JSON object
|
||||
ns::person p {
|
||||
j["name"].get<std::string>(),
|
||||
j["address"].get<std::string>(),
|
||||
j["age"].get<int>()
|
||||
};
|
||||
```
|
||||
|
||||
It works, but that's quite a lot of boilerplate... Fortunately, there's a better way:
|
||||
|
||||
```cpp
|
||||
// create a person
|
||||
ns::person p {"Ned Flanders", "744 Evergreen Terrace", 60};
|
||||
|
||||
// conversion: person -> json
|
||||
json j = p;
|
||||
|
||||
std::cout << j << std::endl;
|
||||
// {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
|
||||
|
||||
// conversion: json -> person
|
||||
ns::person p2 = j;
|
||||
|
||||
// that's it
|
||||
assert(p == p2);
|
||||
```
|
||||
|
||||
#### Basic usage
|
||||
|
||||
To make this work with one of your types, you only need to provide two functions:
|
||||
|
||||
```cpp
|
||||
using nlohmann::json;
|
||||
|
||||
namespace ns {
|
||||
void to_json(json& j, const person& p) {
|
||||
j = json{{"name", p.name}, {"address", p.address}, {"age", p.age}};
|
||||
}
|
||||
|
||||
void from_json(const json& j, person& p) {
|
||||
p.name = j.at("name").get<std::string>();
|
||||
p.address = j.at("address").get<std::string>();
|
||||
p.age = j.at("age").get<int>();
|
||||
}
|
||||
} // namespace ns
|
||||
```
|
||||
|
||||
That's all! When calling the `json` constructor with your type, your custom `to_json` method will be automatically called.
|
||||
Likewise, when calling `get<your_type>()`, the `from_json` method will be called.
|
||||
|
||||
Some important things:
|
||||
|
||||
* Those methods **MUST** be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace `ns`, where `person` is defined).
|
||||
* When using `get<your_type>()`, `your_type` **MUST** be [DefaultConstructible](http://en.cppreference.com/w/cpp/concept/DefaultConstructible). (There is a way to bypass this requirement described later.)
|
||||
* In function `from_json`, use function [`at()`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a93403e803947b86f4da2d1fb3345cf2c.html#a93403e803947b86f4da2d1fb3345cf2c) to access the object values rather than `operator[]`. In case a key does not exist, `at` throws an exception that you can handle, whereas `operator[]` exhibits undefined behavior.
|
||||
* In case your type contains several `operator=` definitions, code like `your_variable = your_json;` [may not compile](https://github.com/nlohmann/json/issues/667). You need to write `your_variable = your_json.get<decltype your_variable>();` instead.
|
||||
* You do not need to add serializers or deserializers for STL types like `std::vector`: the library already implements these.
|
||||
* Be careful with the definition order of the `from_json`/`to_json` functions: If a type `B` has a member of type `A`, you **MUST** define `to_json(A)` before `to_json(B)`. Look at [issue 561](https://github.com/nlohmann/json/issues/561) for more details.
|
||||
|
||||
|
||||
#### How do I convert third-party types?
|
||||
|
||||
This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:
|
||||
|
||||
The library uses **JSON Serializers** to convert types to json.
|
||||
The default serializer for `nlohmann::json` is `nlohmann::adl_serializer` (ADL means [Argument-Dependent Lookup](http://en.cppreference.com/w/cpp/language/adl)).
|
||||
|
||||
It is implemented like this (simplified):
|
||||
|
||||
```cpp
|
||||
template <typename T>
|
||||
struct adl_serializer {
|
||||
static void to_json(json& j, const T& value) {
|
||||
// calls the "to_json" method in T's namespace
|
||||
}
|
||||
|
||||
static void from_json(const json& j, T& value) {
|
||||
// same thing, but with the "from_json" method
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
This serializer works fine when you have control over the type's namespace. However, what about `boost::optional`, or `std::filesystem::path` (C++17)? Hijacking the `boost` namespace is pretty bad, and it's illegal to add something other than template specializations to `std`...
|
||||
|
||||
To solve this, you need to add a specialization of `adl_serializer` to the `nlohmann` namespace, here's an example:
|
||||
|
||||
```cpp
|
||||
// partial specialization (full specialization works too)
|
||||
namespace nlohmann {
|
||||
template <typename T>
|
||||
struct adl_serializer<boost::optional<T>> {
|
||||
static void to_json(json& j, const boost::optional<T>& opt) {
|
||||
if (opt == boost::none) {
|
||||
j = nullptr;
|
||||
} else {
|
||||
j = *opt; // this will call adl_serializer<T>::to_json which will
|
||||
// find the free function to_json in T's namespace!
|
||||
}
|
||||
}
|
||||
|
||||
static void from_json(const json& j, boost::optional<T>& opt) {
|
||||
if (j.is_null()) {
|
||||
opt = boost::none;
|
||||
} else {
|
||||
opt = j.get<T>(); // same as above, but with
|
||||
// adl_serializer<T>::from_json
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
#### How can I use `get()` for non-default constructible/non-copyable types?
|
||||
|
||||
There is a way, if your type is [MoveConstructible](http://en.cppreference.com/w/cpp/concept/MoveConstructible). You will need to specialize the `adl_serializer` as well, but with a special `from_json` overload:
|
||||
|
||||
```cpp
|
||||
struct move_only_type {
|
||||
move_only_type() = delete;
|
||||
move_only_type(int ii): i(ii) {}
|
||||
move_only_type(const move_only_type&) = delete;
|
||||
move_only_type(move_only_type&&) = default;
|
||||
|
||||
int i;
|
||||
};
|
||||
|
||||
namespace nlohmann {
|
||||
template <>
|
||||
struct adl_serializer<move_only_type> {
|
||||
// note: the return type is no longer 'void', and the method only takes
|
||||
// one argument
|
||||
static move_only_type from_json(const json& j) {
|
||||
return {j.get<int>()};
|
||||
}
|
||||
|
||||
// Here's the catch! You must provide a to_json method! Otherwise you
|
||||
// will not be able to convert move_only_type to json, since you fully
|
||||
// specialized adl_serializer on that type
|
||||
static void to_json(json& j, move_only_type t) {
|
||||
j = t.i;
|
||||
}
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
#### Can I write my own serializer? (Advanced use)
|
||||
|
||||
Yes. You might want to take a look at [`unit-udt.cpp`](https://github.com/nlohmann/json/blob/develop/test/src/unit-udt.cpp) in the test suite, to see a few examples.
|
||||
|
||||
If you write your own serializer, you'll need to do a few things:
|
||||
|
||||
* use a different `basic_json` alias than `nlohmann::json` (the last template parameter of `basic_json` is the `JSONSerializer`)
|
||||
* use your `basic_json` alias (or a template parameter) in all your `to_json`/`from_json` methods
|
||||
* use `nlohmann::to_json` and `nlohmann::from_json` when you need ADL
|
||||
|
||||
Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.
|
||||
|
||||
```cpp
|
||||
// You should use void as a second template argument
|
||||
// if you don't need compile-time checks on T
|
||||
template<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>
|
||||
struct less_than_32_serializer {
|
||||
template <typename BasicJsonType>
|
||||
static void to_json(BasicJsonType& j, T value) {
|
||||
// we want to use ADL, and call the correct to_json overload
|
||||
using nlohmann::to_json; // this method is called by adl_serializer,
|
||||
// this is where the magic happens
|
||||
to_json(j, value);
|
||||
}
|
||||
|
||||
template <typename BasicJsonType>
|
||||
static void from_json(const BasicJsonType& j, T& value) {
|
||||
// same thing here
|
||||
using nlohmann::from_json;
|
||||
from_json(j, value);
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
Be **very** careful when reimplementing your serializer, you can stack overflow if you don't pay attention:
|
||||
|
||||
```cpp
|
||||
template <typename T, void>
|
||||
struct bad_serializer
|
||||
{
|
||||
template <typename BasicJsonType>
|
||||
static void to_json(BasicJsonType& j, const T& value) {
|
||||
// this calls BasicJsonType::json_serializer<T>::to_json(j, value);
|
||||
// if BasicJsonType::json_serializer == bad_serializer ... oops!
|
||||
j = value;
|
||||
}
|
||||
|
||||
template <typename BasicJsonType>
|
||||
static void to_json(const BasicJsonType& j, T& value) {
|
||||
// this calls BasicJsonType::json_serializer<T>::from_json(j, value);
|
||||
// if BasicJsonType::json_serializer == bad_serializer ... oops!
|
||||
value = j.template get<T>(); // oops!
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### Binary formats (CBOR and MessagePack)
|
||||
|
||||
Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports [CBOR](http://cbor.io) (Concise Binary Object Representation) and [MessagePack](http://msgpack.org) to efficiently encode JSON values to byte vectors and to decode such vectors.
|
||||
|
||||
```cpp
|
||||
// create a JSON value
|
||||
json j = R"({"compact": true, "schema": 0})"_json;
|
||||
|
||||
// serialize to CBOR
|
||||
std::vector<std::uint8_t> v_cbor = json::to_cbor(j);
|
||||
|
||||
// 0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x00
|
||||
|
||||
// roundtrip
|
||||
json j_from_cbor = json::from_cbor(v_cbor);
|
||||
|
||||
// serialize to MessagePack
|
||||
std::vector<std::uint8_t> v_msgpack = json::to_msgpack(j);
|
||||
|
||||
// 0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x00
|
||||
|
||||
// roundtrip
|
||||
json j_from_msgpack = json::from_msgpack(v_msgpack);
|
||||
```
|
||||
|
||||
|
||||
## Supported compilers
|
||||
|
||||
Though it's 2016 already, the support for C++11 is still a bit sparse. Currently, the following compilers are known to work:
|
||||
Though it's 2017 already, the support for C++11 is still a bit sparse. Currently, the following compilers are known to work:
|
||||
|
||||
- GCC 4.9 - 6.0 (and possibly later)
|
||||
- Clang 3.4 - 3.9 (and possibly later)
|
||||
- GCC 4.9 - 7.2 (and possibly later)
|
||||
- Clang 3.4 - 5.0 (and possibly later)
|
||||
- Intel C++ Compiler 17.0.2 (and possibly later)
|
||||
- Microsoft Visual C++ 2015 / Build Tools 14.0.25123.0 (and possibly later)
|
||||
- Microsoft Visual C++ 2017 / Build Tools 15.5.180.51428 (and possibly later)
|
||||
|
||||
I would be happy to learn about other compilers/versions.
|
||||
|
||||
@@ -413,26 +766,28 @@ The following compilers are currently used in continuous integration at [Travis]
|
||||
|
||||
| Compiler | Operating System | Version String |
|
||||
|-----------------|------------------------------|----------------|
|
||||
| GCC 4.9.3 | Ubuntu 14.04.4 LTS | g++-4.9 (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3 |
|
||||
| GCC 5.3.0 | Ubuntu 14.04.4 LTS | g++-5 (Ubuntu 5.3.0-3ubuntu1~14.04) 5.3.0 20151204 |
|
||||
| GCC 6.1.1 | Ubuntu 14.04.4 LTS | g++-6 (Ubuntu 6.1.1-3ubuntu11~14.04.1) 6.1.1 20160511 |
|
||||
| Clang 3.6.0 | Ubuntu 14.04.4 LTS | clang version 3.6.0 (tags/RELEASE_360/final) |
|
||||
| Clang 3.6.1 | Ubuntu 14.04.4 LTS | clang version 3.6.1 (tags/RELEASE_361/final) |
|
||||
| Clang 3.6.2 | Ubuntu 14.04.4 LTS | clang version 3.6.2 (tags/RELEASE_362/final) |
|
||||
| Clang 3.7.0 | Ubuntu 14.04.4 LTS | clang version 3.7.0 (tags/RELEASE_370/final) |
|
||||
| Clang 3.7.1 | Ubuntu 14.04.4 LTS | clang version 3.7.1 (tags/RELEASE_371/final) |
|
||||
| Clang 3.8.0 | Ubuntu 14.04.4 LTS | clang version 3.8.0 (tags/RELEASE_380/final) |
|
||||
| Clang 3.8.1 | Ubuntu 14.04.4 LTS | clang version 3.8.1 (tags/RELEASE_381/final) |
|
||||
| Clang Xcode 6.1 | Darwin Kernel Version 13.4.0 (OSX 10.9.5) | Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn) |
|
||||
| Clang Xcode 6.2 | Darwin Kernel Version 13.4.0 (OSX 10.9.5) | Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn) |
|
||||
| Clang Xcode 6.3 | Darwin Kernel Version 14.3.0 (OSX 10.10.3) | Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn) |
|
||||
| GCC 4.9.4 | Ubuntu 14.04.5 LTS | g++-4.9 (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4 |
|
||||
| GCC 5.4.1 | Ubuntu 14.04.5 LTS | g++-5 (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904 |
|
||||
| GCC 6.3.0 | Ubuntu 14.04.5 LTS | g++-6 (Ubuntu/Linaro 6.3.0-18ubuntu2~14.04) 6.3.0 20170519 |
|
||||
| GCC 7.1.0 | Ubuntu 14.04.5 LTS | g++-7 (Ubuntu 7.1.0-5ubuntu2~14.04) 7.1.0
|
||||
| Clang 3.5.0 | Ubuntu 14.04.5 LTS | clang version 3.5.0-4ubuntu2~trusty2 (tags/RELEASE_350/final) |
|
||||
| Clang 3.6.2 | Ubuntu 14.04.5 LTS | clang version 3.6.2-svn240577-1~exp1 (branches/release_36) |
|
||||
| Clang 3.7.1 | Ubuntu 14.04.5 LTS | clang version 3.7.1-svn253571-1~exp1 (branches/release_37) |
|
||||
| Clang 3.8.0 | Ubuntu 14.04.5 LTS | clang version 3.8.0-2ubuntu3~trusty5 (tags/RELEASE_380/final) |
|
||||
| Clang 3.9.1 | Ubuntu 14.04.5 LTS | clang version 3.9.1-4ubuntu3~14.04.2 (tags/RELEASE_391/rc2) |
|
||||
| Clang 4.0.1 | Ubuntu 14.04.5 LTS | clang version 4.0.1-svn305264-1~exp1 (branches/release_40) |
|
||||
| Clang 5.0.0 | Ubuntu 14.04.5 LTS | clang version 5.0.0-svn310902-1~exp1 (branches/release_50) |
|
||||
| Clang Xcode 6.4 | Darwin Kernel Version 14.3.0 (OSX 10.10.3) | Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) |
|
||||
| Clang Xcode 7.1 | Darwin Kernel Version 14.5.0 (OSX 10.10.5) | Apple LLVM version 7.0.0 (clang-700.1.76) |
|
||||
| Clang Xcode 7.2 | Darwin Kernel Version 15.0.0 (OSX 10.10.5) | Apple LLVM version 7.0.2 (clang-700.1.81) |
|
||||
| Clang Xcode 7.3 | Darwin Kernel Version 15.0.0 (OSX 10.10.5) | Apple LLVM version 7.3.0 (clang-703.0.29) |
|
||||
| Clang Xcode 8.0 | Darwin Kernel Version 15.6.0 (OSX 10.11.6) | Apple LLVM version 8.0.0 (clang-800.0.38) |
|
||||
| Visual Studio 14 2015 | Windows Server 2012 R2 (x64) | Microsoft (R) Build Engine version 14.0.25123.0 |
|
||||
|
||||
| Clang Xcode 8.0 | Darwin Kernel Version 15.6.0 | Apple LLVM version 8.0.0 (clang-800.0.38) |
|
||||
| Clang Xcode 8.1 | Darwin Kernel Version 16.1.0 (macOS 10.12.1) | Apple LLVM version 8.0.0 (clang-800.0.42.1) |
|
||||
| Clang Xcode 8.2 | Darwin Kernel Version 16.1.0 (macOS 10.12.1) | Apple LLVM version 8.0.0 (clang-800.0.42.1) |
|
||||
| Clang Xcode 8.3 | Darwin Kernel Version 16.5.0 (macOS 10.12.4) | Apple LLVM version 8.1.0 (clang-802.0.38) |
|
||||
| Clang Xcode 9.0 | Darwin Kernel Version 16.7.0 (macOS 10.12.6) | Apple LLVM version 9.0.0 (clang-900.0.37) |
|
||||
| Clang Xcode 9.1 | Darwin Kernel Version 16.7.0 (macOS 10.12.6) | Apple LLVM version 9.0.0 (clang-900.0.38) |
|
||||
| Clang Xcode 9.2 | Darwin Kernel Version 16.7.0 (macOS 10.12.6) | Apple LLVM version 8.1.0 (clang-900.0.39.2) |
|
||||
| Visual Studio 14 2015 | Windows Server 2012 R2 (x64) | Microsoft (R) Build Engine version 14.0.25420.1, MSVC 19.0.24215.1 |
|
||||
| Visual Studio 2017 | Windows Server 2016 | Microsoft (R) Build Engine version 15.5.180.51428, MSVC 19.12.25830.2 |
|
||||
|
||||
## License
|
||||
|
||||
@@ -440,7 +795,7 @@ The following compilers are currently used in continuous integration at [Travis]
|
||||
|
||||
The class is licensed under the [MIT License](http://opensource.org/licenses/MIT):
|
||||
|
||||
Copyright © 2013-2016 [Niels Lohmann](http://nlohmann.me)
|
||||
Copyright © 2013-2017 [Niels Lohmann](http://nlohmann.me)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
@@ -448,11 +803,23 @@ The above copyright notice and this permission notice shall be included in all c
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
* * *
|
||||
|
||||
The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the [MIT License](http://opensource.org/licenses/MIT) (see above). Copyright © 2008-2009 [Björn Hoehrmann](http://bjoern.hoehrmann.de/) <bjoern@hoehrmann.de>
|
||||
|
||||
## Contact
|
||||
|
||||
If you have questions regarding the library, I would like to invite you to [open an issue at Github](https://github.com/nlohmann/json/issues/new). Please describe your request, problem, or question as detailed as possible, and also mention the version of the library you are using as well as the version of your compiler and operating system. Opening an issue at Github allows other users and contributors to this library to collaborate. For instance, I have little experience with MSVC, and most issues in this regard have been solved by a growing community. If you have a look at the [closed issues](https://github.com/nlohmann/json/issues?q=is%3Aissue+is%3Aclosed), you will see that we react quite timely in most cases.
|
||||
|
||||
Only if your request would contain confidential information, please [send me an email](mailto:mail@nlohmann.me). For encrypted messages, please use [this key](https://keybase.io/nlohmann/pgp_keys.asc).
|
||||
|
||||
|
||||
## Thanks
|
||||
|
||||
I deeply appreciate the help of the following people.
|
||||
|
||||

|
||||
|
||||
- [Teemperor](https://github.com/Teemperor) implemented CMake support and lcov integration, realized escape and Unicode handling in the string parser, and fixed the JSON serialization.
|
||||
- [elliotgoodrich](https://github.com/elliotgoodrich) fixed an issue with double deletion in the iterator classes.
|
||||
- [kirkshoop](https://github.com/kirkshoop) made the iterators of the class composable to other libraries.
|
||||
@@ -465,7 +832,7 @@ I deeply appreciate the help of the following people.
|
||||
- [Eric Cornelius](https://github.com/EricMCornelius) pointed out a bug in the handling with NaN and infinity values. He also improved the performance of the string escaping.
|
||||
- [易思龙](https://github.com/likebeta) implemented a conversion from anonymous enums.
|
||||
- [kepkin](https://github.com/kepkin) patiently pushed forward the support for Microsoft Visual studio.
|
||||
- [gregmarr](https://github.com/gregmarr) simplified the implementation of reverse iterators and helped with numerous hints and improvements.
|
||||
- [gregmarr](https://github.com/gregmarr) simplified the implementation of reverse iterators and helped with numerous hints and improvements. In particular, he pushed forward the implementation of user-defined types.
|
||||
- [Caio Luppi](https://github.com/caiovlp) fixed a bug in the Unicode handling.
|
||||
- [dariomt](https://github.com/dariomt) fixed some typos in the examples.
|
||||
- [Daniel Frey](https://github.com/d-frey) cleaned up some pointers and implemented exception-safe memory allocation.
|
||||
@@ -493,15 +860,113 @@ I deeply appreciate the help of the following people.
|
||||
- [duncanwerner](https://github.com/duncanwerner) found a really embarrassing performance regression in the 2.0.0 release.
|
||||
- [Damien](https://github.com/dtoma) fixed one of the last conversion warnings.
|
||||
- [Thomas Braun](https://github.com/t-b) fixed a warning in a test case.
|
||||
- [Théo DELRIEU](https://github.com/theodelrieu) patiently and constructively oversaw the long way toward [iterator-range parsing](https://github.com/nlohmann/json/issues/290).
|
||||
- [Théo DELRIEU](https://github.com/theodelrieu) patiently and constructively oversaw the long way toward [iterator-range parsing](https://github.com/nlohmann/json/issues/290). He also implemented the magic behind the serialization/deserialization of user-defined types.
|
||||
- [Stefan](https://github.com/5tefan) fixed a minor issue in the documentation.
|
||||
- [Vasil Dimov](https://github.com/vasild) fixed the documentation regarding conversions from `std::multiset`.
|
||||
- [ChristophJud](https://github.com/ChristophJud) overworked the CMake files to ease project inclusion.
|
||||
- [Vladimir Petrigo](https://github.com/vpetrigo) made a SFINAE hack more readable and added Visual Studio 17 to the build matrix.
|
||||
- [Denis Andrejew](https://github.com/seeekr) fixed a grammar issue in the README file.
|
||||
- [Pierre-Antoine Lacaze](https://github.com/palacaze) found a subtle bug in the `dump()` function.
|
||||
- [TurpentineDistillery](https://github.com/TurpentineDistillery) pointed to [`std::locale::classic()`](http://en.cppreference.com/w/cpp/locale/locale/classic) to avoid too much locale joggling, found some nice performance improvements in the parser, improved the benchmarking code, and realized locale-independent number parsing and printing.
|
||||
- [cgzones](https://github.com/cgzones) had an idea how to fix the Coverity scan.
|
||||
- [Jared Grubb](https://github.com/jaredgrubb) silenced a nasty documentation warning.
|
||||
- [Yixin Zhang](https://github.com/qwename) fixed an integer overflow check.
|
||||
- [Bosswestfalen](https://github.com/Bosswestfalen) merged two iterator classes into a smaller one.
|
||||
- [Daniel599](https://github.com/Daniel599) helped to get Travis execute the tests with Clang's sanitizers.
|
||||
- [Jonathan Lee](https://github.com/vjon) fixed an example in the README file.
|
||||
- [gnzlbg](https://github.com/gnzlbg) supported the implementation of user-defined types.
|
||||
- [Alexej Harm](https://github.com/qis) helped to get the user-defined types working with Visual Studio.
|
||||
- [Jared Grubb](https://github.com/jaredgrubb) supported the implementation of user-defined types.
|
||||
- [EnricoBilla](https://github.com/EnricoBilla) noted a typo in an example.
|
||||
- [Martin Hořeňovský](https://github.com/horenmar) found a way for a 2x speedup for the compilation time of the test suite.
|
||||
- [ukhegg](https://github.com/ukhegg) found proposed an improvement for the examples section.
|
||||
- [rswanson-ihi](https://github.com/rswanson-ihi) noted a typo in the README.
|
||||
- [Mihai Stan](https://github.com/stanmihai4) fixed a bug in the comparison with `nullptr`s.
|
||||
- [Tushar Maheshwari](https://github.com/tusharpm) added [cotire](https://github.com/sakra/cotire) support to speed up the compilation.
|
||||
- [TedLyngmo](https://github.com/TedLyngmo) noted a typo in the README, removed unnecessary bit arithmetic, and fixed some `-Weffc++` warnings.
|
||||
- [Krzysztof Woś](https://github.com/krzysztofwos) made exceptions more visible.
|
||||
- [ftillier](https://github.com/ftillier) fixed a compiler warning.
|
||||
- [tinloaf](https://github.com/tinloaf) made sure all pushed warnings are properly popped.
|
||||
- [Fytch](https://github.com/Fytch) found a bug in the documentation.
|
||||
- [Jay Sistar](https://github.com/Type1J) implemented a Meson build description.
|
||||
- [Henry Lee](https://github.com/HenryRLee) fixed a warning in ICC and improved the iterator implementation.
|
||||
- [Vincent Thiery](https://github.com/vthiery) maintains a package for the Conan package manager.
|
||||
- [Steffen](https://github.com/koemeet) fixed a potential issue with MSVC and `std::min`.
|
||||
- [Mike Tzou](https://github.com/Chocobo1) fixed some typos.
|
||||
- [amrcode](https://github.com/amrcode) noted a missleading documentation about comparison of floats.
|
||||
- [Oleg Endo](https://github.com/olegendo) reduced the memory consumption by replacing `<iostream>` with `<iosfwd>`.
|
||||
- [dan-42](https://github.com/dan-42) cleaned up the CMake files to simplify including/reusing of the library.
|
||||
- [Nikita Ofitserov](https://github.com/himikof) allowed for moving values from initializer lists.
|
||||
- [Greg Hurrell](https://github.com/wincent) fixed a typo.
|
||||
- [Dmitry Kukovinets](https://github.com/DmitryKuk) fixed a typo.
|
||||
- [kbthomp1](https://github.com/kbthomp1) fixed an issue related to the Intel OSX compiler.
|
||||
- [Markus Werle](https://github.com/daixtrose) fixed a typo.
|
||||
- [WebProdPP](https://github.com/WebProdPP) fixed a subtle error in a precondition check.
|
||||
- [Alex](https://github.com/leha-bot) noted an error in a code sample.
|
||||
- [Tom de Geus](https://github.com/tdegeus) reported some warnings with ICC and helped fixing them.
|
||||
- [Perry Kundert](https://github.com/pjkundert) simplified reading from input streams.
|
||||
- [Sonu Lohani](https://github.com/sonulohani) fixed a small compilation error.
|
||||
- [Jamie Seward](https://github.com/jseward) fixed all MSVC warnings.
|
||||
- [Nate Vargas](https://github.com/eld00d) added a Doxygen tag file.
|
||||
- [pvleuven](https://github.com/pvleuven) helped fixing a warning in ICC.
|
||||
- [Pavel](https://github.com/crea7or) helped fixing some warnings in MSVC.
|
||||
- [Jamie Seward](https://github.com/jseward) avoided unneccessary string copies in `find()` and `count()`.
|
||||
- [Mitja](https://github.com/Itja) fixed some typos.
|
||||
- [Jorrit Wronski](https://github.com/jowr) updated the Hunter package links.
|
||||
- [Matthias Möller](https://github.com/TinyTinni) added a `.natvis` for the MSVC debug view.
|
||||
- [bogemic](https://github.com/bogemic) fixed some C++17 deprecation warnings.
|
||||
- [Eren Okka](https://github.com/erengy) fixed some MSVC warnings.
|
||||
|
||||
Thanks a lot for helping out!
|
||||
|
||||
Thanks a lot for helping out! Please [let me know](mailto:mail@nlohmann.me) if I forgot someone.
|
||||
|
||||
|
||||
## Used third-party tools
|
||||
|
||||
The library itself contains of a single header file licensed under the MIT license. However, it is built, tested, documented, and whatnot using a lot of third-party tools and services. Thanks a lot!
|
||||
|
||||
- [**American fuzzy lop**](http://lcamtuf.coredump.cx/afl/) for fuzz testing
|
||||
- [**AppVeyor**](https://www.appveyor.com) for [continuous integration](https://ci.appveyor.com/project/nlohmann/json) on Windows
|
||||
- [**Artistic Style**](http://astyle.sourceforge.net) for automatic source code identation
|
||||
- [**benchpress**](https://github.com/sbs-ableton/benchpress) to benchmark the code
|
||||
- [**Catch**](https://github.com/philsquared/Catch) for the unit tests
|
||||
- [**Clang**](http://clang.llvm.org) for compilation with code sanitizers
|
||||
- [**Cmake**](https://cmake.org) for build automation
|
||||
- [**Codacity**](https://www.codacy.com) for further [code analysis](https://www.codacy.com/app/nlohmann/json)
|
||||
- [**Coveralls**](https://coveralls.io) to measure [code coverage](https://coveralls.io/github/nlohmann/json)
|
||||
- [**Coverity Scan**](https://scan.coverity.com) for [static analysis](https://scan.coverity.com/projects/nlohmann-json)
|
||||
- [**cppcheck**](http://cppcheck.sourceforge.net) for static analysis
|
||||
- [**cxxopts**](https://github.com/jarro2783/cxxopts) to let benchpress parse command-line parameters
|
||||
- [**Doxygen**](http://www.stack.nl/~dimitri/doxygen/) to generate [documentation](https://nlohmann.github.io/json/)
|
||||
- [**git-update-ghpages**](https://github.com/rstacruz/git-update-ghpages) to upload the documentation to gh-pages
|
||||
- [**Github Changelog Generator**](https://github.com/skywinder/github-changelog-generator) to generate the [ChangeLog](https://github.com/nlohmann/json/blob/develop/ChangeLog.md)
|
||||
- [**libFuzzer**](http://llvm.org/docs/LibFuzzer.html) to implement fuzz testing for OSS-Fuzz
|
||||
- [**OSS-Fuzz**](https://github.com/google/oss-fuzz) for continuous fuzz testing of the library
|
||||
- [**Probot**](https://probot.github.io) for automating maintainer tasks such as closing stale issues, requesting missing information, or detecting toxic comments.
|
||||
- [**send_to_wandbox**](https://github.com/nlohmann/json/blob/develop/doc/scripts/send_to_wandbox.py) to send code examples to [Wandbox](http://melpon.org/wandbox)
|
||||
- [**Travis**](https://travis-ci.org) for [continuous integration](https://travis-ci.org/nlohmann/json) on Linux and macOS
|
||||
- [**Valgrind**](http://valgrind.org) to check for correct memory management
|
||||
- [**Wandbox**](http://melpon.org/wandbox) for [online examples](https://wandbox.org/permlink/Op57X0V7fTf2tdwl)
|
||||
|
||||
|
||||
## Projects using JSON for Modern C++
|
||||
|
||||
The library is currently used in Apple macOS Sierra and iOS 10. I am not sure what they are using the library for, but I am happy that it runs on so many devices.
|
||||
|
||||
|
||||
## Notes
|
||||
|
||||
- The code contains numerous debug **assertions** which can be switched off by defining the preprocessor macro `NDEBUG`, see the [documentation of `assert`](http://en.cppreference.com/w/cpp/error/assert). In particular, note [`operator[]`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a2e26bd0b0168abb61f67ad5bcd5b9fa1.html#a2e26bd0b0168abb61f67ad5bcd5b9fa1) implements **unchecked access** for const objects: If the given key is not present, the behavior is undefined (think of a dereferenced null pointer) and yields an [assertion failure](https://github.com/nlohmann/json/issues/289) if assertions are switched on. If you are not sure whether an element in an object exists, use checked access with the [`at()` function](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a674de1ee73e6bf4843fc5dc1351fb726.html#a674de1ee73e6bf4843fc5dc1351fb726).
|
||||
- As the exact type of a number is not defined in the [JSON specification](http://rfc7159.net/rfc7159), this library tries to choose the best fitting C++ number type automatically. As a result, the type `double` may be used to store numbers which may yield [**floating-point exceptions**](https://github.com/nlohmann/json/issues/181) in certain rare situations if floating-point exceptions have been unmasked in the calling code. These exceptions are not caused by the library and need to be fixed in the calling code, such as by re-masking the exceptions prior to calling library functions.
|
||||
- The library supports **Unicode input** as follows:
|
||||
- Only **UTF-8** encoded input is supported which is the default encoding for JSON according to [RFC 7159](http://rfc7159.net/rfc7159#rfc.section.8.1).
|
||||
- Other encodings such as Latin-1, UTF-16, or UTF-32 are not supported and will yield parse or serialization errors.
|
||||
- [Unicode noncharacters](http://www.unicode.org/faq/private_use.html#nonchar1) will not be replaced by the library.
|
||||
- Invalid surrogates (e.g., incomplete pairs such as `\uDEAD`) will yield parse errors.
|
||||
- The strings stored in the library are UTF-8 encoded. When using the default string type (`std::string`), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
|
||||
- The code can be compiled without C++ **runtime type identification** features; that is, you can use the `-fno-rtti` compiler flag.
|
||||
- **Exceptions** are used widely within the library. They can, however, be switched off with either using the compiler flag `-fno-exceptions` or by defining the symbol `JSON_NOEXCEPTION`. In this case, exceptions are replaced by an `abort()` call.
|
||||
- By default, the library does not preserve the **insertion order of object elements**. This is standards-compliant, as the [JSON standard](https://tools.ietf.org/html/rfc7159.html) defines objects as "an unordered collection of zero or more name/value pairs". If you do want to preserve the insertion order, you can specialize the object type with containers like [`tsl::ordered_map`](https://github.com/Tessil/ordered-map) ([integration](https://github.com/nlohmann/json/issues/546#issuecomment-304447518)) or [`nlohmann::fifo_map`](https://github.com/nlohmann/fifo_map) ([integration](https://github.com/nlohmann/json/issues/485#issuecomment-333652309)).
|
||||
|
||||
|
||||
## Execute unit tests
|
||||
@@ -509,10 +974,11 @@ Thanks a lot for helping out!
|
||||
To compile and run the tests, you need to execute
|
||||
|
||||
```sh
|
||||
$ make check
|
||||
|
||||
===============================================================================
|
||||
All tests passed (8905161 assertions in 35 test cases)
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ cmake ..
|
||||
$ cmake --build .
|
||||
$ ctest --output-on-failure
|
||||
```
|
||||
|
||||
For more information, have a look at the file [.travis.yml](https://github.com/nlohmann/json/blob/master/.travis.yml).
|
||||
|
||||
37
appveyor.yml
37
appveyor.yml
@@ -1,10 +1,27 @@
|
||||
version: '{build}'
|
||||
os: Visual Studio 2015
|
||||
init: []
|
||||
install: []
|
||||
build_script:
|
||||
- set PATH=C:\Program Files (x86)\MSBuild\14.0\Bin;%PATH%
|
||||
- cmake . -G "Visual Studio 14 2015"
|
||||
- cmake --build . --config Release
|
||||
test_script:
|
||||
- ctest -C Release -V
|
||||
version: '{build}'
|
||||
|
||||
os:
|
||||
- Visual Studio 2015
|
||||
- Visual Studio 2017
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- additional_flags: ""
|
||||
- additional_flags: "/permissive- /std:c++latest /utf-8"
|
||||
|
||||
matrix:
|
||||
exclude:
|
||||
- additional_flags: "/permissive- /std:c++latest /utf-8"
|
||||
os: Visual Studio 2015
|
||||
|
||||
init: []
|
||||
|
||||
install: []
|
||||
|
||||
build_script:
|
||||
- IF "%APPVEYOR_BUILD_WORKER_IMAGE%" == "Visual Studio 2015" ( SET GEN="Visual Studio 14 2015") ELSE (SET GEN="Visual Studio 15 2017")
|
||||
- cmake . -G%GEN% -DCMAKE_CXX_FLAGS="%additional_flags%"
|
||||
- cmake --build . --config Release
|
||||
|
||||
test_script:
|
||||
- ctest -C Release -V -j
|
||||
|
||||
21
benchmarks/Makefile
Normal file
21
benchmarks/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
#
|
||||
# Build/run json.hpp benchmarks, eg. CXX=g++-7 make
|
||||
#
|
||||
# The existing json_benchmarks did not allow optimization under some compilers
|
||||
#
|
||||
all: json_benchmarks json_benchmarks_simple number_jsons
|
||||
bash -c 'time ./json_benchmarks'
|
||||
bash -c 'time ./json_benchmarks_simple'
|
||||
|
||||
json_benchmarks: src/benchmarks.cpp ../src/json.hpp
|
||||
$(CXX) -std=c++11 -pthread $(CXXFLAGS) -DNDEBUG -O3 -flto -I thirdparty/benchpress -I thirdparty/cxxopts -I../src src/benchmarks.cpp $(LDFLAGS) -o $@
|
||||
|
||||
json_benchmarks_simple: src/benchmarks_simple.cpp ../src/json.hpp
|
||||
$(CXX) -std=c++11 $(CXXFLAGS) -DNDEBUG -O3 -flto -I../src $(<) $(LDFLAGS) -o $@
|
||||
|
||||
number_jsons:
|
||||
(test -e files/numbers/floats.json -a -e files/numbers/signed_ints.json -a -e files/numbers/unsigned_ints.json) || (cd files/numbers ; python generate.py)
|
||||
|
||||
clean:
|
||||
rm -f json_benchmarks json_benchmarks_simple files/numbers/*.json
|
||||
3
benchmarks/README.md
Normal file
3
benchmarks/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Bechmarks
|
||||
|
||||
Run `make` to compile and run a small set of benchmarks.
|
||||
@@ -1,107 +0,0 @@
|
||||
#define BENCHPRESS_CONFIG_MAIN
|
||||
|
||||
#include <fstream>
|
||||
#include <benchpress.hpp>
|
||||
#include <json.hpp>
|
||||
|
||||
BENCHMARK("parse jeopardy.json", [](benchpress::context* ctx)
|
||||
{
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/jeopardy/jeopardy.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
}
|
||||
})
|
||||
|
||||
BENCHMARK("parse canada.json", [](benchpress::context* ctx)
|
||||
{
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/nativejson-benchmark/canada.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
}
|
||||
})
|
||||
|
||||
BENCHMARK("parse citm_catalog.json", [](benchpress::context* ctx)
|
||||
{
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/nativejson-benchmark/citm_catalog.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
}
|
||||
})
|
||||
|
||||
BENCHMARK("parse twitter.json", [](benchpress::context* ctx)
|
||||
{
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/nativejson-benchmark/twitter.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
}
|
||||
})
|
||||
|
||||
BENCHMARK("parse numbers/floats.json", [](benchpress::context* ctx)
|
||||
{
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/numbers/floats.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
}
|
||||
})
|
||||
|
||||
BENCHMARK("parse numbers/signed_ints.json", [](benchpress::context* ctx)
|
||||
{
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/numbers/signed_ints.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
}
|
||||
})
|
||||
|
||||
BENCHMARK("parse numbers/unsigned_ints.json", [](benchpress::context* ctx)
|
||||
{
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/numbers/unsigned_ints.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
}
|
||||
})
|
||||
|
||||
BENCHMARK("dump jeopardy.json", [](benchpress::context* ctx)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/jeopardy/jeopardy.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
std::ofstream output_file("jeopardy.dump.json");
|
||||
|
||||
ctx->reset_timer();
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
output_file << j;
|
||||
}
|
||||
|
||||
std::remove("jeopardy.dump.json");
|
||||
})
|
||||
|
||||
BENCHMARK("dump jeopardy.json with indent", [](benchpress::context* ctx)
|
||||
{
|
||||
std::ifstream input_file("benchmarks/files/jeopardy/jeopardy.json");
|
||||
nlohmann::json j;
|
||||
j << input_file;
|
||||
std::ofstream output_file("jeopardy.dump.json");
|
||||
|
||||
ctx->reset_timer();
|
||||
for (size_t i = 0; i < ctx->num_iterations(); ++i)
|
||||
{
|
||||
output_file << std::setw(4) << j;
|
||||
}
|
||||
|
||||
std::remove("jeopardy.dump.json");
|
||||
})
|
||||
132
benchmarks/src/benchmarks.cpp
Normal file
132
benchmarks/src/benchmarks.cpp
Normal file
@@ -0,0 +1,132 @@
|
||||
#define BENCHPRESS_CONFIG_MAIN
|
||||
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <benchpress.hpp>
|
||||
#include <json.hpp>
|
||||
#include <pthread.h>
|
||||
#include <thread>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
struct StartUp
|
||||
{
|
||||
StartUp()
|
||||
{
|
||||
#ifndef __llvm__
|
||||
// pin thread to a single CPU
|
||||
cpu_set_t cpuset;
|
||||
pthread_t thread;
|
||||
thread = pthread_self();
|
||||
CPU_ZERO(&cpuset);
|
||||
CPU_SET(std::thread::hardware_concurrency() - 1, &cpuset);
|
||||
pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
|
||||
#endif
|
||||
}
|
||||
};
|
||||
StartUp startup;
|
||||
|
||||
enum class EMode { input, output_no_indent, output_with_indent };
|
||||
|
||||
static void bench(benchpress::context& ctx,
|
||||
const std::string& in_path,
|
||||
const EMode mode)
|
||||
{
|
||||
// using string streams for benchmarking to factor-out cold-cache disk
|
||||
// access.
|
||||
#if defined( FROMFILE )
|
||||
std::ifstream istr;
|
||||
{
|
||||
istr.open( in_path, std::ifstream::in );
|
||||
|
||||
// read the stream once
|
||||
json j;
|
||||
istr >> j;
|
||||
// clear flags and rewind
|
||||
istr.clear();
|
||||
istr.seekg(0);
|
||||
}
|
||||
#else
|
||||
std::stringstream istr;
|
||||
{
|
||||
// read file into string stream
|
||||
std::ifstream input_file(in_path);
|
||||
istr << input_file.rdbuf();
|
||||
input_file.close();
|
||||
|
||||
// read the stream once
|
||||
json j;
|
||||
istr >> j;
|
||||
// clear flags and rewind
|
||||
istr.clear();
|
||||
istr.seekg(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
// benchmarking input
|
||||
case EMode::input:
|
||||
{
|
||||
ctx.reset_timer();
|
||||
|
||||
for (size_t i = 0; i < ctx.num_iterations(); ++i)
|
||||
{
|
||||
// clear flags and rewind
|
||||
istr.clear();
|
||||
istr.seekg(0);
|
||||
json j;
|
||||
istr >> j;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// benchmarking output
|
||||
case EMode::output_no_indent:
|
||||
case EMode::output_with_indent:
|
||||
{
|
||||
// create JSON value from input
|
||||
json j;
|
||||
istr >> j;
|
||||
std::stringstream ostr;
|
||||
|
||||
ctx.reset_timer();
|
||||
for (size_t i = 0; i < ctx.num_iterations(); ++i)
|
||||
{
|
||||
if (mode == EMode::output_no_indent)
|
||||
{
|
||||
ostr << j;
|
||||
}
|
||||
else
|
||||
{
|
||||
ostr << std::setw(4) << j;
|
||||
}
|
||||
|
||||
// reset data
|
||||
ostr.str(std::string());
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define BENCHMARK_I(mode, title, in_path) \
|
||||
BENCHMARK((title), [](benchpress::context* ctx) \
|
||||
{ \
|
||||
bench(*ctx, (in_path), (mode)); \
|
||||
})
|
||||
|
||||
BENCHMARK_I(EMode::input, "parse jeopardy.json", "files/jeopardy/jeopardy.json");
|
||||
BENCHMARK_I(EMode::input, "parse canada.json", "files/nativejson-benchmark/canada.json");
|
||||
BENCHMARK_I(EMode::input, "parse citm_catalog.json", "files/nativejson-benchmark/citm_catalog.json");
|
||||
BENCHMARK_I(EMode::input, "parse twitter.json", "files/nativejson-benchmark/twitter.json");
|
||||
BENCHMARK_I(EMode::input, "parse numbers/floats.json", "files/numbers/floats.json");
|
||||
BENCHMARK_I(EMode::input, "parse numbers/signed_ints.json", "files/numbers/signed_ints.json");
|
||||
BENCHMARK_I(EMode::input, "parse numbers/unsigned_ints.json", "files/numbers/unsigned_ints.json");
|
||||
|
||||
BENCHMARK_I(EMode::output_no_indent, "dump jeopardy.json", "files/jeopardy/jeopardy.json");
|
||||
BENCHMARK_I(EMode::output_with_indent, "dump jeopardy.json with indent", "files/jeopardy/jeopardy.json");
|
||||
BENCHMARK_I(EMode::output_no_indent, "dump numbers/floats.json", "files/numbers/floats.json");
|
||||
BENCHMARK_I(EMode::output_no_indent, "dump numbers/signed_ints.json", "files/numbers/signed_ints.json");
|
||||
158
benchmarks/src/benchmarks_simple.cpp
Normal file
158
benchmarks/src/benchmarks_simple.cpp
Normal file
@@ -0,0 +1,158 @@
|
||||
//
|
||||
// benchmarks_simple.cpp -- a less complex version of benchmarks.cpp, that better reflects actual performance
|
||||
//
|
||||
// For some reason, the complexity of benchmarks.cpp doesn't allow
|
||||
// the compiler to optimize code using json.hpp effectively. The
|
||||
// exact same tests, with the use of benchpress and cxxopts produces
|
||||
// much faster code, at least under g++.
|
||||
//
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
#include <list>
|
||||
#include <tuple>
|
||||
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
enum class EMode { input, output, indent };
|
||||
|
||||
static double bench(const EMode mode, size_t iters, const std::string& in_path )
|
||||
{
|
||||
// using string streams for benchmarking to factor-out cold-cache disk
|
||||
// access. Define FROMFILE to use file I/O instead.
|
||||
#if defined( FROMFILE )
|
||||
std::ifstream istr;
|
||||
{
|
||||
istr.open( in_path, std::ifstream::in );
|
||||
|
||||
// read the stream once
|
||||
json j;
|
||||
istr >> j;
|
||||
// clear flags and rewind
|
||||
istr.clear();
|
||||
istr.seekg(0);
|
||||
}
|
||||
#else
|
||||
std::stringstream istr;
|
||||
{
|
||||
// read file into string stream
|
||||
std::ifstream input_file(in_path);
|
||||
istr << input_file.rdbuf();
|
||||
input_file.close();
|
||||
|
||||
// read the stream once
|
||||
json j;
|
||||
istr >> j;
|
||||
// clear flags and rewind
|
||||
istr.clear();
|
||||
istr.seekg(0);
|
||||
}
|
||||
#endif
|
||||
double tps = 0;
|
||||
switch (mode)
|
||||
{
|
||||
// benchmarking input
|
||||
case EMode::input:
|
||||
{
|
||||
auto start = std::chrono::system_clock::now();
|
||||
for (size_t i = 0; i < iters; ++i)
|
||||
{
|
||||
// clear flags and rewind
|
||||
istr.clear();
|
||||
istr.seekg(0);
|
||||
json j;
|
||||
istr >> j;
|
||||
}
|
||||
auto ended = std::chrono::system_clock::now();
|
||||
tps = 1.0 / std::chrono::duration<double>( ended - start ).count();
|
||||
break;
|
||||
}
|
||||
|
||||
// benchmarking output
|
||||
case EMode::output:
|
||||
case EMode::indent:
|
||||
{
|
||||
// create JSON value from input
|
||||
json j;
|
||||
istr >> j;
|
||||
std::stringstream ostr;
|
||||
|
||||
auto start = std::chrono::system_clock::now();
|
||||
for (size_t i = 0; i < iters; ++i)
|
||||
{
|
||||
if (mode == EMode::indent)
|
||||
{
|
||||
ostr << j;
|
||||
}
|
||||
else
|
||||
{
|
||||
ostr << std::setw(4) << j;
|
||||
}
|
||||
|
||||
// reset data
|
||||
ostr.str(std::string());
|
||||
}
|
||||
auto ended = std::chrono::system_clock::now();
|
||||
tps = 1.0 / std::chrono::duration<double>( ended - start ).count();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
return tps;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
struct average {
|
||||
T _sum { 0 };
|
||||
size_t _count { 0 };
|
||||
T operator+=( const T &val_ ) { _sum += val_; +_count++; return val_; }
|
||||
operator T() { return _sum / _count; }
|
||||
};
|
||||
|
||||
// Execute each test approximately enough times to get near 1
|
||||
// transaction per second, and compute the average; a single aggregate
|
||||
// number that gives a performance metric representing both parsing
|
||||
// and output.
|
||||
|
||||
int main( int, char ** )
|
||||
{
|
||||
std::list<std::tuple<std::string, EMode, size_t, std::string>> tests {
|
||||
{ "parse jeopardy.json", EMode::input, 2, "files/jeopardy/jeopardy.json" },
|
||||
{ "parse canada.json", EMode::input, 30, "files/nativejson-benchmark/canada.json" },
|
||||
{ "parse citm_catalog.json", EMode::input, 120, "files/nativejson-benchmark/citm_catalog.json" },
|
||||
{ "parse twitter.json", EMode::input, 225, "files/nativejson-benchmark/twitter.json" },
|
||||
{ "parse floats.json", EMode::input, 5, "files/numbers/floats.json" },
|
||||
{ "parse signed_ints.json", EMode::input, 6, "files/numbers/signed_ints.json" },
|
||||
{ "parse unsigned_ints.json", EMode::input, 6, "files/numbers/unsigned_ints.json" },
|
||||
{ "dump jeopardy.json", EMode::output, 5, "files/jeopardy/jeopardy.json" },
|
||||
{ "dump jeopardy.json w/ind.", EMode::indent, 5, "files/jeopardy/jeopardy.json" },
|
||||
{ "dump floats.json", EMode::output, 2, "files/numbers/floats.json" },
|
||||
{ "dump signed_ints.json", EMode::output, 20, "files/numbers/signed_ints.json" },
|
||||
};
|
||||
|
||||
average<double> avg;
|
||||
for ( auto t : tests ) {
|
||||
std::string name, path;
|
||||
EMode mode;
|
||||
size_t iters;
|
||||
std::tie(name, mode, iters, path) = t;
|
||||
auto tps = bench( mode, iters, path );
|
||||
avg += tps;
|
||||
std::cout
|
||||
<< std::left
|
||||
<< std::setw( 30 ) << name
|
||||
<< std::right
|
||||
<< " x " << std::setw( 3 ) << iters
|
||||
<< std::left
|
||||
<< " == " << std::setw( 10 ) << tps
|
||||
<< std::right
|
||||
<< " TPS, " << std::setw( 8 ) << std::round( tps * 1e6 / iters )
|
||||
<< " ms/op"
|
||||
<< std::endl;
|
||||
}
|
||||
std::cout << std::setw( 40 ) << "" << std::string( 10, '-' ) << std::endl;
|
||||
std::cout << std::setw( 40 ) << "" << std::setw( 10 ) << std::left << avg << " TPS Average" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
21
benchmarks/thirdparty/benchpress/LICENSE
vendored
Normal file
21
benchmarks/thirdparty/benchpress/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Christopher Gilbert
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
19
benchmarks/thirdparty/cxxopts/LICENSE
vendored
Normal file
19
benchmarks/thirdparty/cxxopts/LICENSE
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2014 Jarryd Beck
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -1,6 +1,3 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0024 OLD)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/@JSON_TARGETS_FILENAME@)
|
||||
cmake_policy(POP)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake")
|
||||
check_required_components("@PROJECT_NAME@")
|
||||
|
||||
32
doc/Doxyfile
32
doc/Doxyfile
@@ -1,12 +1,12 @@
|
||||
# Doxyfile 1.8.9.1
|
||||
# Doxyfile 1.8.14
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = "JSON for Modern C++"
|
||||
PROJECT_NUMBER = 2.0.5
|
||||
PROJECT_BRIEF =
|
||||
PROJECT_NUMBER = 3.0.1
|
||||
PROJECT_BRIEF =
|
||||
PROJECT_LOGO =
|
||||
OUTPUT_DIRECTORY = .
|
||||
CREATE_SUBDIRS = NO
|
||||
@@ -27,10 +27,11 @@ MULTILINE_CPP_IS_BRIEF = NO
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = YES
|
||||
TAB_SIZE = 4
|
||||
ALIASES = "complexity=@par Complexity\n"
|
||||
ALIASES += liveexample{2}="@par Example\n \1 \n @includelineno \2.cpp \n Output (play with this example @htmlinclude \2.link):\n @verbinclude \2.output \n The example code above can be translated with @verbatim g++ -std=c++11 -Isrc doc/examples/\2.cpp -o \2 @endverbatim"
|
||||
ALIASES += requirement="@par Requirements\n"
|
||||
ALIASES += exceptionsafety="@par Exception safety\n"
|
||||
ALIASES = "complexity=@par Complexity\n" \
|
||||
"liveexample{2}=@par Example\n \1 \n @includelineno \2.cpp \n Output (play with this example @htmlinclude \2.link):\n @verbinclude \2.output \n The <a href= https://github.com/nlohmann/json/blob/develop/doc/examples/\2.cpp>example code</a> above can be translated with @verbatim g++ -std=c++11 -Isrc doc/examples/\2.cpp -o \2 @endverbatim" \
|
||||
"requirement=@par Requirements\n" \
|
||||
"exceptionsafety=@par Exception safety\n" \
|
||||
"iterators=@par Iterator validity\n"
|
||||
TCL_SUBST =
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
@@ -38,12 +39,14 @@ OPTIMIZE_FOR_FORTRAN = NO
|
||||
OPTIMIZE_OUTPUT_VHDL = NO
|
||||
EXTENSION_MAPPING =
|
||||
MARKDOWN_SUPPORT = YES
|
||||
TOC_INCLUDE_HEADINGS = 0
|
||||
AUTOLINK_SUPPORT = NO
|
||||
BUILTIN_STL_SUPPORT = YES
|
||||
CPP_CLI_SUPPORT = NO
|
||||
SIP_SUPPORT = NO
|
||||
IDL_PROPERTY_SUPPORT = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
GROUP_NESTED_COMPOUNDS = NO
|
||||
SUBGROUPING = YES
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
INLINE_SIMPLE_STRUCTS = NO
|
||||
@@ -97,19 +100,21 @@ WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = YES
|
||||
WARN_AS_ERROR = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = ../src/json.hpp index.md
|
||||
INPUT = ../src/json.hpp \
|
||||
index.md faq.md
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS =
|
||||
RECURSIVE = NO
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXCLUDE_SYMBOLS = nlohmann::anonymous_namespace
|
||||
EXCLUDE_SYMBOLS = nlohmann::detail
|
||||
EXAMPLE_PATH = examples
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
@@ -131,6 +136,8 @@ REFERENCES_LINK_SOURCE = NO
|
||||
SOURCE_TOOLTIPS = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = NO
|
||||
CLANG_ASSISTED_PARSING = YES
|
||||
CLANG_OPTIONS = -std=c++11
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -152,13 +159,14 @@ HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_SAT = 100
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_TIMESTAMP = YES
|
||||
HTML_DYNAMIC_MENUS = YES
|
||||
HTML_DYNAMIC_SECTIONS = YES
|
||||
HTML_INDEX_NUM_ENTRIES = 100
|
||||
GENERATE_DOCSET = YES
|
||||
DOCSET_FEEDNAME = "Doxygen generated docs"
|
||||
DOCSET_BUNDLE_ID = me.nlohmann.json
|
||||
DOCSET_PUBLISHER_ID = me.nlohmann
|
||||
DOCSET_PUBLISHER_NAME = Niels Lohmann
|
||||
DOCSET_PUBLISHER_NAME = NielsLohmann
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
@@ -215,6 +223,7 @@ LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
LATEX_SOURCE_CODE = NO
|
||||
LATEX_BIB_STYLE = plain
|
||||
LATEX_TIMESTAMP = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -272,7 +281,7 @@ SKIP_FUNCTION_MACROS = YES
|
||||
# Configuration options related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
GENERATE_TAGFILE = html/nlohmann_json.tag
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
EXTERNAL_PAGES = YES
|
||||
@@ -308,6 +317,7 @@ DOTFILE_DIRS =
|
||||
MSCFILE_DIRS =
|
||||
DIAFILE_DIRS =
|
||||
PLANTUML_JAR_PATH =
|
||||
PLANTUML_CFG_FILE =
|
||||
PLANTUML_INCLUDE_PATH =
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
|
||||
14
doc/Makefile
14
doc/Makefile
@@ -53,13 +53,17 @@ clean:
|
||||
# create Doxygen documentation
|
||||
doxygen: create_output create_links
|
||||
doxygen
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, AllocatorType >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, AllocatorType >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, AllocatorType, JSONSerializer >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, AllocatorType JSONSerializer >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType JSONSerializer >@@g' html/*.html
|
||||
$(SED) -i 's@template<template< typename U, typename V, typename... Args > class ObjectType = std::map, template< typename U, typename... Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator, template< typename T, typename SFINAE=void > class JSONSerializer = adl_serializer>@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer >@@g' html/*.html
|
||||
$(SED) -i 's@< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer >@@g' html/*.html
|
||||
|
||||
upload: clean doxygen check_output
|
||||
cd html ; ../scripts/git-update-ghpages nlohmann/json
|
||||
scripts/git-update-ghpages nlohmann/json html
|
||||
rm -fr html
|
||||
open http://nlohmann.github.io/json/
|
||||
|
||||
|
||||
BIN
doc/avatars.png
Normal file
BIN
doc/avatars.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 557 KiB |
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -29,7 +30,8 @@ int main()
|
||||
j["new"]["key"]["value"] = {"another", "list"};
|
||||
|
||||
// count elements
|
||||
j["size"] = j.size();
|
||||
auto s = j.size();
|
||||
j["size"] = s;
|
||||
|
||||
// pretty print with indent of 4 spaces
|
||||
std::cout << std::setw(4) << j << '\n';
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/r3wa3rI5yxgQQcrm"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/Op57X0V7fTf2tdwl"><b>online</b></a>
|
||||
@@ -23,5 +23,5 @@
|
||||
"value": 42.99
|
||||
},
|
||||
"pi": 3.141,
|
||||
"size": 9
|
||||
"size": 8
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/1fsm4gI55p83DOwU"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/jKwlQd7pFg6UcIN5"><b>online</b></a>
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -8,7 +9,7 @@ int main()
|
||||
json object =
|
||||
{
|
||||
{"the good", "il buono"},
|
||||
{"the bad", "il cativo"},
|
||||
{"the bad", "il cattivo"},
|
||||
{"the ugly", "il brutto"}
|
||||
};
|
||||
|
||||
@@ -21,13 +22,27 @@ int main()
|
||||
// output changed array
|
||||
std::cout << object << '\n';
|
||||
|
||||
// try to write at a nonexisting key
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() on a non-object type
|
||||
json str = "I am a string";
|
||||
str.at("the good") = "Another string";
|
||||
}
|
||||
catch (json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to write at a nonexisting key
|
||||
object.at("the fast") = "il rapido";
|
||||
}
|
||||
catch (std::out_of_range& e)
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << "out of range: " << e.what() << '\n';
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/rsnwWxpDjmtRRSzb"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/FR2yYACZpx0k3Rzp"><b>online</b></a>
|
||||
@@ -1,3 +1,4 @@
|
||||
"il brutto"
|
||||
{"the bad":"il cattivo","the good":"il buono","the ugly":"il brutto"}
|
||||
out of range: key 'the fast' not found
|
||||
[json.exception.type_error.304] cannot use at() with string
|
||||
[json.exception.out_of_range.403] key 'the fast' not found
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -8,19 +9,33 @@ int main()
|
||||
json object =
|
||||
{
|
||||
{"the good", "il buono"},
|
||||
{"the bad", "il cativo"},
|
||||
{"the bad", "il cattivo"},
|
||||
{"the ugly", "il brutto"}
|
||||
};
|
||||
|
||||
// output element with key "the ugly"
|
||||
std::cout << object.at("the ugly") << '\n';
|
||||
|
||||
// try to read from a nonexisting key
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() on a non-object type
|
||||
const json str = "I am a string";
|
||||
std::cout << str.at("the good") << '\n';
|
||||
}
|
||||
catch (json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to read from a nonexisting key
|
||||
std::cout << object.at("the fast") << '\n';
|
||||
}
|
||||
catch (std::out_of_range)
|
||||
catch (json::out_of_range)
|
||||
{
|
||||
std::cout << "out of range" << '\n';
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/aeoZrnhnb3HKClCY"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/aeF8S2D89A8lfVx1"><b>online</b></a>
|
||||
@@ -1,2 +1,3 @@
|
||||
"il brutto"
|
||||
[json.exception.type_error.304] cannot use at() with string
|
||||
out of range
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -16,13 +17,27 @@ int main()
|
||||
// output changed array
|
||||
std::cout << array << '\n';
|
||||
|
||||
// try to write beyond the array limit
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() on a non-array type
|
||||
json str = "I am a string";
|
||||
str.at(0) = "Another string";
|
||||
}
|
||||
catch (json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to write beyond the array limit
|
||||
array.at(5) = "sixth";
|
||||
}
|
||||
catch (std::out_of_range& e)
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << "out of range: " << e.what() << '\n';
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/R7z2SB2rMdFQ9XtR"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/GmNdQadc8cWDzYpn"><b>online</b></a>
|
||||
@@ -1,3 +1,4 @@
|
||||
"third"
|
||||
["first","second","third","fourth"]
|
||||
out of range: array index 5 is out of range
|
||||
[json.exception.type_error.304] cannot use at() with string
|
||||
[json.exception.out_of_range.401] array index 5 is out of range
|
||||
|
||||
@@ -1,22 +1,37 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create JSON array
|
||||
json array = {"first", "2nd", "third", "fourth"};
|
||||
const json array = {"first", "2nd", "third", "fourth"};
|
||||
|
||||
// output element at index 2 (third element)
|
||||
std::cout << array.at(2) << '\n';
|
||||
|
||||
// try to read beyond the array limit
|
||||
|
||||
// exception type_error.304
|
||||
try
|
||||
{
|
||||
// use at() on a non-array type
|
||||
const json str = "I am a string";
|
||||
std::cout << str.at(0) << '\n';
|
||||
}
|
||||
catch (json::type_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// exception out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to read beyond the array limit
|
||||
std::cout << array.at(5) << '\n';
|
||||
}
|
||||
catch (std::out_of_range)
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << "out of range" << '\n';
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/L1bMeiN6nYm7JrvA"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/zLkp80JFsKEuPd1t"><b>online</b></a>
|
||||
@@ -1,2 +1,3 @@
|
||||
"third"
|
||||
out of range
|
||||
[json.exception.type_error.304] cannot use at() with string
|
||||
[json.exception.out_of_range.401] array index 5 is out of range
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -32,4 +33,71 @@ int main()
|
||||
j.at("/array/1"_json_pointer) = 21;
|
||||
// output the changed array
|
||||
std::cout << j["array"] << '\n';
|
||||
|
||||
|
||||
// out_of_range.106
|
||||
try
|
||||
{
|
||||
// try to use an array index with leading '0'
|
||||
json::reference ref = j.at("/array/01"_json_pointer);
|
||||
}
|
||||
catch (json::parse_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.109
|
||||
try
|
||||
{
|
||||
// try to use an array index that is not a number
|
||||
json::reference ref = j.at("/array/one"_json_pointer);
|
||||
}
|
||||
catch (json::parse_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to use a an invalid array index
|
||||
json::reference ref = j.at("/array/4"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.402
|
||||
try
|
||||
{
|
||||
// try to use the array index '-'
|
||||
json::reference ref = j.at("/array/-"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.403
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer to an nonexistent object key
|
||||
json::const_reference ref = j.at("/foo"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.404
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer that cannot be resolved
|
||||
json::reference ref = j.at("/number/foo"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/NDSjglHZIjIZ0Uxg"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/3RO0naQeY3cWXNAz"><b>online</b></a>
|
||||
@@ -4,3 +4,9 @@
|
||||
2
|
||||
"bar"
|
||||
[1,21]
|
||||
[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'
|
||||
[json.exception.parse_error.109] parse error: array index 'one' is not a number
|
||||
[json.exception.out_of_range.401] array index 4 is out of range
|
||||
[json.exception.out_of_range.402] array index '-' (2) is out of range
|
||||
[json.exception.out_of_range.403] key 'foo' not found
|
||||
[json.exception.out_of_range.404] unresolved reference token 'foo'
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a JSON value
|
||||
json j =
|
||||
const json j =
|
||||
{
|
||||
{"number", 1}, {"string", "foo"}, {"array", {1, 2}}
|
||||
};
|
||||
@@ -20,4 +21,59 @@ int main()
|
||||
std::cout << j.at("/array"_json_pointer) << '\n';
|
||||
// output element with JSON pointer "/array/1"
|
||||
std::cout << j.at("/array/1"_json_pointer) << '\n';
|
||||
|
||||
// out_of_range.109
|
||||
try
|
||||
{
|
||||
// try to use an array index that is not a number
|
||||
json::const_reference ref = j.at("/array/one"_json_pointer);
|
||||
}
|
||||
catch (json::parse_error& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to use a an invalid array index
|
||||
json::const_reference ref = j.at("/array/4"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.402
|
||||
try
|
||||
{
|
||||
// try to use the array index '-'
|
||||
json::const_reference ref = j.at("/array/-"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.403
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer to an nonexistent object key
|
||||
json::const_reference ref = j.at("/foo"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
|
||||
// out_of_range.404
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer that cannot be resolved
|
||||
json::const_reference ref = j.at("/number/foo"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/OuLYiMJ3pgyOHupb"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/LwtGNqrGgjcWey3P"><b>online</b></a>
|
||||
@@ -2,3 +2,8 @@
|
||||
"foo"
|
||||
[1,2]
|
||||
2
|
||||
[json.exception.parse_error.109] parse error: array index 'one' is not a number
|
||||
[json.exception.out_of_range.401] array index 4 is out of range
|
||||
[json.exception.out_of_range.402] array index '-' (2) is out of range
|
||||
[json.exception.out_of_range.403] key 'foo' not found
|
||||
[json.exception.out_of_range.404] unresolved reference token 'foo'
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create JSON values
|
||||
json j_null;
|
||||
json j_boolean = true;
|
||||
json j_number_integer = 17;
|
||||
json j_number_float = 23.42;
|
||||
@@ -16,7 +16,6 @@ int main()
|
||||
json j_string = "Hello, world";
|
||||
|
||||
// call back()
|
||||
//std::cout << j_null.back() << '\n'; // would throw
|
||||
std::cout << j_boolean.back() << '\n';
|
||||
std::cout << j_number_integer.back() << '\n';
|
||||
std::cout << j_number_float.back() << '\n';
|
||||
@@ -25,4 +24,15 @@ int main()
|
||||
std::cout << j_array.back() << '\n';
|
||||
//std::cout << j_array_empty.back() << '\n'; // undefined behavior
|
||||
std::cout << j_string.back() << '\n';
|
||||
|
||||
// back() called on a null value
|
||||
try
|
||||
{
|
||||
json j_null;
|
||||
j_null.back();
|
||||
}
|
||||
catch (json::invalid_iterator& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/nPVnBcHf8nrNpGOJ"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/VXTfLJQl9x7NaHrI"><b>online</b></a>
|
||||
@@ -4,3 +4,4 @@ true
|
||||
2
|
||||
16
|
||||
"Hello, world"
|
||||
[json.exception.invalid_iterator.214] cannot get value
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
#include <json.hpp>
|
||||
#include <deque>
|
||||
#include <list>
|
||||
#include <forward_list>
|
||||
#include <set>
|
||||
#include <unordered_set>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create an array from std::vector
|
||||
std::vector<int> c_vector {1, 2, 3, 4};
|
||||
json j_vec(c_vector);
|
||||
|
||||
// create an array from std::deque
|
||||
std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};
|
||||
json j_deque(c_deque);
|
||||
|
||||
// create an array from std::list
|
||||
std::list<bool> c_list {true, true, false, true};
|
||||
json j_list(c_list);
|
||||
|
||||
// create an array from std::forward_list
|
||||
std::forward_list<int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};
|
||||
json j_flist(c_flist);
|
||||
|
||||
// create an array from std::array
|
||||
std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};
|
||||
json j_array(c_array);
|
||||
|
||||
// create an array from std::set
|
||||
std::set<std::string> c_set {"one", "two", "three", "four", "one"};
|
||||
json j_set(c_set); // only one entry for "one" is used
|
||||
|
||||
// create an array from std::unordered_set
|
||||
std::unordered_set<std::string> c_uset {"one", "two", "three", "four", "one"};
|
||||
json j_uset(c_uset); // only one entry for "one" is used
|
||||
|
||||
// create an array from std::multiset
|
||||
std::multiset<std::string> c_mset {"one", "two", "one", "four"};
|
||||
json j_mset(c_mset); // only one entry for "one" is used
|
||||
|
||||
// create an array from std::unordered_multiset
|
||||
std::unordered_multiset<std::string> c_umset {"one", "two", "one", "four"};
|
||||
json j_umset(c_umset); // both entries for "one" are used
|
||||
|
||||
// serialize the JSON arrays
|
||||
std::cout << j_vec << '\n';
|
||||
std::cout << j_deque << '\n';
|
||||
std::cout << j_list << '\n';
|
||||
std::cout << j_flist << '\n';
|
||||
std::cout << j_array << '\n';
|
||||
std::cout << j_set << '\n';
|
||||
std::cout << j_uset << '\n';
|
||||
std::cout << j_mset << '\n';
|
||||
std::cout << j_umset << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/MghSilgvyh4ZJShY"><b>online</b></a>
|
||||
@@ -1,9 +0,0 @@
|
||||
[1,2,3,4]
|
||||
[1.2,2.3,3.4,5.6]
|
||||
[true,true,false,true]
|
||||
[12345678909876,23456789098765,34567890987654,45678909876543]
|
||||
[1,2,3,4]
|
||||
["four","one","three","two"]
|
||||
["four","three","two","one"]
|
||||
["four","one","one","two"]
|
||||
["four","two","one","one"]
|
||||
@@ -1,27 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create values of different integer types
|
||||
short n42 = 42;
|
||||
int n23 = 23;
|
||||
long n1024 = 1024;
|
||||
int_least32_t n17 = 17;
|
||||
uint8_t n8 = 8;
|
||||
|
||||
// create JSON numbers
|
||||
json j42(n42);
|
||||
json j23(n23);
|
||||
json j1024(n1024);
|
||||
json j17(n17);
|
||||
json j8(n8);
|
||||
|
||||
// serialize the JSON numbers
|
||||
std::cout << j42 << '\n';
|
||||
std::cout << j23 << '\n';
|
||||
std::cout << j1024 << '\n';
|
||||
std::cout << j17 << '\n';
|
||||
std::cout << j8 << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/PcMzhcu2RpD7KSwr"><b>online</b></a>
|
||||
@@ -1,5 +0,0 @@
|
||||
42
|
||||
23
|
||||
1024
|
||||
17
|
||||
8
|
||||
@@ -1,21 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create values of different floating-point types
|
||||
float f42 = 42.23;
|
||||
float f_nan = 1.0f / 0.0f;
|
||||
double f23 = 23.42;
|
||||
|
||||
// create JSON numbers
|
||||
json j42(f42);
|
||||
json j_nan(f_nan);
|
||||
json j23(f23);
|
||||
|
||||
// serialize the JSON numbers
|
||||
std::cout << j42 << '\n';
|
||||
std::cout << j_nan << '\n';
|
||||
std::cout << j23 << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/2TCYWSrOxnR05AZI"><b>online</b></a>
|
||||
@@ -1,3 +0,0 @@
|
||||
42.2299995422363
|
||||
null
|
||||
23.42
|
||||
@@ -1,41 +0,0 @@
|
||||
#include <json.hpp>
|
||||
#include <unordered_map>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create an object from std::map
|
||||
std::map<std::string, int> c_map
|
||||
{
|
||||
{"one", 1}, {"two", 2}, {"three", 3}
|
||||
};
|
||||
json j_map(c_map);
|
||||
|
||||
// create an object from std::unordered_map
|
||||
std::unordered_map<const char*, double> c_umap
|
||||
{
|
||||
{"one", 1.2}, {"two", 2.3}, {"three", 3.4}
|
||||
};
|
||||
json j_umap(c_umap);
|
||||
|
||||
// create an object from std::multimap
|
||||
std::multimap<std::string, bool> c_mmap
|
||||
{
|
||||
{"one", true}, {"two", true}, {"three", false}, {"three", true}
|
||||
};
|
||||
json j_mmap(c_mmap); // only one entry for key "three" is used
|
||||
|
||||
// create an object from std::unordered_multimap
|
||||
std::unordered_multimap<std::string, bool> c_ummap
|
||||
{
|
||||
{"one", true}, {"two", true}, {"three", false}, {"three", true}
|
||||
};
|
||||
json j_ummap(c_ummap); // only one entry for key "three" is used
|
||||
|
||||
// serialize the JSON objects
|
||||
std::cout << j_map << '\n';
|
||||
std::cout << j_umap << '\n';
|
||||
std::cout << j_mmap << '\n';
|
||||
std::cout << j_ummap << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/JzLCMcSXNsh4uVWa"><b>online</b></a>
|
||||
@@ -1,4 +0,0 @@
|
||||
{"one":1,"three":3,"two":2}
|
||||
{"one":1.2,"three":3.4,"two":2.3}
|
||||
{"one":true,"three":false,"two":true}
|
||||
{"one":true,"three":false,"two":true}
|
||||
@@ -1,15 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a string value
|
||||
std::string s = "The quick brown fox jumps over the lazy dog.";
|
||||
|
||||
// create a JSON string value
|
||||
json j = s;
|
||||
|
||||
// serialize the JSON string
|
||||
std::cout << j << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/b9hbCY8zfOiTOuoK"><b>online</b></a>
|
||||
@@ -1 +0,0 @@
|
||||
"The quick brown fox jumps over the lazy dog."
|
||||
218
doc/examples/basic_json__CompatibleType.cpp
Normal file
218
doc/examples/basic_json__CompatibleType.cpp
Normal file
@@ -0,0 +1,218 @@
|
||||
#include <iostream>
|
||||
#include <deque>
|
||||
#include <list>
|
||||
#include <forward_list>
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
#include <valarray>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// ============
|
||||
// object types
|
||||
// ============
|
||||
|
||||
// create an object from an object_t value
|
||||
json::object_t object_value = { {"one", 1}, {"two", 2} };
|
||||
json j_object_t(object_value);
|
||||
|
||||
// create an object from std::map
|
||||
std::map<std::string, int> c_map
|
||||
{
|
||||
{"one", 1}, {"two", 2}, {"three", 3}
|
||||
};
|
||||
json j_map(c_map);
|
||||
|
||||
// create an object from std::unordered_map
|
||||
std::unordered_map<const char*, double> c_umap
|
||||
{
|
||||
{"one", 1.2}, {"two", 2.3}, {"three", 3.4}
|
||||
};
|
||||
json j_umap(c_umap);
|
||||
|
||||
// create an object from std::multimap
|
||||
std::multimap<std::string, bool> c_mmap
|
||||
{
|
||||
{"one", true}, {"two", true}, {"three", false}, {"three", true}
|
||||
};
|
||||
json j_mmap(c_mmap); // only one entry for key "three" is used
|
||||
|
||||
// create an object from std::unordered_multimap
|
||||
std::unordered_multimap<std::string, bool> c_ummap
|
||||
{
|
||||
{"one", true}, {"two", true}, {"three", false}, {"three", true}
|
||||
};
|
||||
json j_ummap(c_ummap); // only one entry for key "three" is used
|
||||
|
||||
// serialize the JSON objects
|
||||
std::cout << j_object_t << '\n';
|
||||
std::cout << j_map << '\n';
|
||||
std::cout << j_umap << '\n';
|
||||
std::cout << j_mmap << '\n';
|
||||
std::cout << j_ummap << "\n\n";
|
||||
|
||||
|
||||
// ===========
|
||||
// array types
|
||||
// ===========
|
||||
|
||||
// create an array from an array_t value
|
||||
json::array_t array_value = {"one", "two", 3, 4.5, false};
|
||||
json j_array_t(array_value);
|
||||
|
||||
// create an array from std::vector
|
||||
std::vector<int> c_vector {1, 2, 3, 4};
|
||||
json j_vec(c_vector);
|
||||
|
||||
// create an array from std::valarray
|
||||
std::valarray<short> c_valarray {10, 9, 8, 7};
|
||||
json j_valarray(c_valarray);
|
||||
|
||||
// create an array from std::deque
|
||||
std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};
|
||||
json j_deque(c_deque);
|
||||
|
||||
// create an array from std::list
|
||||
std::list<bool> c_list {true, true, false, true};
|
||||
json j_list(c_list);
|
||||
|
||||
// create an array from std::forward_list
|
||||
std::forward_list<int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};
|
||||
json j_flist(c_flist);
|
||||
|
||||
// create an array from std::array
|
||||
std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};
|
||||
json j_array(c_array);
|
||||
|
||||
// create an array from std::set
|
||||
std::set<std::string> c_set {"one", "two", "three", "four", "one"};
|
||||
json j_set(c_set); // only one entry for "one" is used
|
||||
|
||||
// create an array from std::unordered_set
|
||||
std::unordered_set<std::string> c_uset {"one", "two", "three", "four", "one"};
|
||||
json j_uset(c_uset); // only one entry for "one" is used
|
||||
|
||||
// create an array from std::multiset
|
||||
std::multiset<std::string> c_mset {"one", "two", "one", "four"};
|
||||
json j_mset(c_mset); // both entries for "one" are used
|
||||
|
||||
// create an array from std::unordered_multiset
|
||||
std::unordered_multiset<std::string> c_umset {"one", "two", "one", "four"};
|
||||
json j_umset(c_umset); // both entries for "one" are used
|
||||
|
||||
// serialize the JSON arrays
|
||||
std::cout << j_array_t << '\n';
|
||||
std::cout << j_vec << '\n';
|
||||
std::cout << j_valarray << '\n';
|
||||
std::cout << j_deque << '\n';
|
||||
std::cout << j_list << '\n';
|
||||
std::cout << j_flist << '\n';
|
||||
std::cout << j_array << '\n';
|
||||
std::cout << j_set << '\n';
|
||||
std::cout << j_uset << '\n';
|
||||
std::cout << j_mset << '\n';
|
||||
std::cout << j_umset << "\n\n";
|
||||
|
||||
|
||||
// ============
|
||||
// string types
|
||||
// ============
|
||||
|
||||
// create string from a string_t value
|
||||
json::string_t string_value = "The quick brown fox jumps over the lazy dog.";
|
||||
json j_string_t(string_value);
|
||||
|
||||
// create a JSON string directly from a string literal
|
||||
json j_string_literal("The quick brown fox jumps over the lazy dog.");
|
||||
|
||||
// create string from std::string
|
||||
std::string s_stdstring = "The quick brown fox jumps over the lazy dog.";
|
||||
json j_stdstring(s_stdstring);
|
||||
|
||||
// serialize the JSON strings
|
||||
std::cout << j_string_t << '\n';
|
||||
std::cout << j_string_literal << '\n';
|
||||
std::cout << j_stdstring << "\n\n";
|
||||
|
||||
|
||||
// ============
|
||||
// number types
|
||||
// ============
|
||||
|
||||
// create a JSON number from number_integer_t
|
||||
json::number_integer_t value_integer_t = -42;
|
||||
json j_integer_t(value_integer_t);
|
||||
|
||||
// create a JSON number from number_unsigned_t
|
||||
json::number_integer_t value_unsigned_t = 17;
|
||||
json j_unsigned_t(value_unsigned_t);
|
||||
|
||||
// create a JSON number from an anonymous enum
|
||||
enum { enum_value = 17 };
|
||||
json j_enum(enum_value);
|
||||
|
||||
// create values of different integer types
|
||||
short n_short = 42;
|
||||
int n_int = -23;
|
||||
long n_long = 1024;
|
||||
int_least32_t n_int_least32_t = -17;
|
||||
uint8_t n_uint8_t = 8;
|
||||
|
||||
// create (integer) JSON numbers
|
||||
json j_short(n_short);
|
||||
json j_int(n_int);
|
||||
json j_long(n_long);
|
||||
json j_int_least32_t(n_int_least32_t);
|
||||
json j_uint8_t(n_uint8_t);
|
||||
|
||||
// create values of different floating-point types
|
||||
json::number_float_t v_ok = 3.141592653589793;
|
||||
json::number_float_t v_nan = NAN;
|
||||
json::number_float_t v_infinity = INFINITY;
|
||||
|
||||
// create values of different floating-point types
|
||||
float n_float = 42.23;
|
||||
float n_float_nan = 1.0f / 0.0f;
|
||||
double n_double = 23.42;
|
||||
|
||||
// create (floating point) JSON numbers
|
||||
json j_ok(v_ok);
|
||||
json j_nan(v_nan);
|
||||
json j_infinity(v_infinity);
|
||||
json j_float(n_float);
|
||||
json j_float_nan(n_float_nan);
|
||||
json j_double(n_double);
|
||||
|
||||
// serialize the JSON numbers
|
||||
std::cout << j_integer_t << '\n';
|
||||
std::cout << j_unsigned_t << '\n';
|
||||
std::cout << j_enum << '\n';
|
||||
std::cout << j_short << '\n';
|
||||
std::cout << j_int << '\n';
|
||||
std::cout << j_long << '\n';
|
||||
std::cout << j_int_least32_t << '\n';
|
||||
std::cout << j_uint8_t << '\n';
|
||||
std::cout << j_ok << '\n';
|
||||
std::cout << j_nan << '\n';
|
||||
std::cout << j_infinity << '\n';
|
||||
std::cout << j_float << '\n';
|
||||
std::cout << j_float_nan << '\n';
|
||||
std::cout << j_double << "\n\n";
|
||||
|
||||
|
||||
// =============
|
||||
// boolean types
|
||||
// =============
|
||||
|
||||
// create boolean values
|
||||
json j_truth = true;
|
||||
json j_falsity = false;
|
||||
|
||||
// serialize the JSON booleans
|
||||
std::cout << j_truth << '\n';
|
||||
std::cout << j_falsity << '\n';
|
||||
}
|
||||
1
doc/examples/basic_json__CompatibleType.link
Normal file
1
doc/examples/basic_json__CompatibleType.link
Normal file
@@ -0,0 +1 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/s7Ecy7hDYSmUWHyx"><b>online</b></a>
|
||||
39
doc/examples/basic_json__CompatibleType.output
Normal file
39
doc/examples/basic_json__CompatibleType.output
Normal file
@@ -0,0 +1,39 @@
|
||||
{"one":1,"two":2}
|
||||
{"one":1,"three":3,"two":2}
|
||||
{"one":1.2,"three":3.4,"two":2.3}
|
||||
{"one":true,"three":false,"two":true}
|
||||
{"one":true,"three":false,"two":true}
|
||||
|
||||
["one","two",3,4.5,false]
|
||||
[1,2,3,4]
|
||||
[10,9,8,7]
|
||||
[1.2,2.3,3.4,5.6]
|
||||
[true,true,false,true]
|
||||
[12345678909876,23456789098765,34567890987654,45678909876543]
|
||||
[1,2,3,4]
|
||||
["four","one","three","two"]
|
||||
["four","three","two","one"]
|
||||
["four","one","one","two"]
|
||||
["four","two","one","one"]
|
||||
|
||||
"The quick brown fox jumps over the lazy dog."
|
||||
"The quick brown fox jumps over the lazy dog."
|
||||
"The quick brown fox jumps over the lazy dog."
|
||||
|
||||
-42
|
||||
17
|
||||
17
|
||||
42
|
||||
-23
|
||||
1024
|
||||
-17
|
||||
8
|
||||
3.14159265358979
|
||||
null
|
||||
null
|
||||
42.2299995422363
|
||||
null
|
||||
23.42
|
||||
|
||||
true
|
||||
false
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -18,4 +19,14 @@ int main()
|
||||
std::cout << j_array_range << '\n';
|
||||
std::cout << j_number_range << '\n';
|
||||
std::cout << j_object_range << '\n';
|
||||
|
||||
// example for an exception
|
||||
try
|
||||
{
|
||||
json j_invalid(j_number.begin() + 1, j_number.end());
|
||||
}
|
||||
catch (json::invalid_iterator& e)
|
||||
{
|
||||
std::cout << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/nKF1QcieoCHm6Lez"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/qpFQRSCnP6iVb3dF"><b>online</b></a>
|
||||
@@ -1,3 +1,4 @@
|
||||
["bravo","charly"]
|
||||
42
|
||||
{"one":"eins"}
|
||||
[json.exception.invalid_iterator.204] iterators out of range
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create an array_t value
|
||||
json::array_t value = {"one", "two", 3, 4.5, false};
|
||||
|
||||
// create a JSON array from the value
|
||||
json j(value);
|
||||
|
||||
// serialize the JSON array
|
||||
std::cout << j << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/dTbSNAvl6TqrMEAn"><b>online</b></a>
|
||||
@@ -1 +0,0 @@
|
||||
["one","two",3,4.5,false]
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/6Qfn12BDzb3vqO5p"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/hRrKgHP2a0zgdxJ1"><b>online</b></a>
|
||||
@@ -1,14 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create boolean values
|
||||
json j_truth = true;
|
||||
json j_falsity = false;
|
||||
|
||||
// serialize the JSON booleans
|
||||
std::cout << j_truth << '\n';
|
||||
std::cout << j_falsity << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/VmVl9pyrQp8LyOnU"><b>online</b></a>
|
||||
@@ -1,2 +0,0 @@
|
||||
true
|
||||
false
|
||||
@@ -1,15 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// an anonymous enum
|
||||
enum { t = 17 };
|
||||
|
||||
// create a JSON number from the enum
|
||||
json j(t);
|
||||
|
||||
// serialize the JSON numbers
|
||||
std::cout << j << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/3xQ1qy7BT9OrSSCo"><b>online</b></a>
|
||||
@@ -1 +0,0 @@
|
||||
17
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/iWYvmlA4qQmtvACX"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/4p0zccjr9gUI65H2"><b>online</b></a>
|
||||
@@ -1,57 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// a JSON text
|
||||
auto text = R"(
|
||||
{
|
||||
"Image": {
|
||||
"Width": 800,
|
||||
"Height": 600,
|
||||
"Title": "View from 15th Floor",
|
||||
"Thumbnail": {
|
||||
"Url": "http://www.example.com/image/481989943",
|
||||
"Height": 125,
|
||||
"Width": 100
|
||||
},
|
||||
"Animated" : false,
|
||||
"IDs": [116, 943, 234, 38793]
|
||||
}
|
||||
}
|
||||
)";
|
||||
|
||||
// fill a stream with JSON text
|
||||
std::stringstream ss;
|
||||
ss << text;
|
||||
|
||||
// create JSON from stream
|
||||
json j_complete(ss); // deprecated!
|
||||
// shall be replaced by: json j_complete = json::parse(ss);
|
||||
std::cout << std::setw(4) << j_complete << "\n\n";
|
||||
|
||||
|
||||
// define parser callback
|
||||
json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)
|
||||
{
|
||||
// skip object elements with key "Thumbnail"
|
||||
if (event == json::parse_event_t::key and parsed == json("Thumbnail"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// fill a stream with JSON text
|
||||
ss.clear();
|
||||
ss << text;
|
||||
|
||||
// create JSON from stream (with callback)
|
||||
json j_filtered(ss, cb);
|
||||
// shall be replaced by: json j_filtered = json::parse(ss, cb);
|
||||
std::cout << std::setw(4) << j_filtered << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/R6dzpKXlxrttShf7"><b>online</b></a>
|
||||
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"Image": {
|
||||
"Animated": false,
|
||||
"Height": 600,
|
||||
"IDs": [
|
||||
116,
|
||||
943,
|
||||
234,
|
||||
38793
|
||||
],
|
||||
"Thumbnail": {
|
||||
"Height": 125,
|
||||
"Url": "http://www.example.com/image/481989943",
|
||||
"Width": 100
|
||||
},
|
||||
"Title": "View from 15th Floor",
|
||||
"Width": 800
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
"Image": {
|
||||
"Animated": false,
|
||||
"Height": 600,
|
||||
"IDs": [
|
||||
116,
|
||||
943,
|
||||
234,
|
||||
38793
|
||||
],
|
||||
"Title": "View from 15th Floor",
|
||||
"Width": 800
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/iZzzxEpB7tbhz0cx"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/XyDVBlGsU1DHpRl9"><b>online</b></a>
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/CaDlatv1uXhQiu7o"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/Z1uToOcza9ALJxNU"><b>online</b></a>
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <json.hpp>
|
||||
#include <iostream>
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/9Tvfs2dJBW8m8ihA"><b>online</b></a>
|
||||
<a target="_blank" href="https://wandbox.org/permlink/JQUGGZT8qZyQsHRv"><b>online</b></a>
|
||||
@@ -1,21 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create values of different floating-point types
|
||||
json::number_float_t v_ok = 3.141592653589793;
|
||||
json::number_float_t v_nan = NAN;
|
||||
json::number_float_t v_infinity = INFINITY;
|
||||
|
||||
// create JSON numbers
|
||||
json j_ok(v_ok);
|
||||
json j_nan(v_nan);
|
||||
json j_infinity(v_infinity);
|
||||
|
||||
// serialize the JSON numbers
|
||||
std::cout << j_ok << '\n';
|
||||
std::cout << j_nan << '\n';
|
||||
std::cout << j_infinity << '\n';
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<a target="_blank" href="http://melpon.org/wandbox/permlink/OTgOxjIAKFvxpFdm"><b>online</b></a>
|
||||
@@ -1,3 +0,0 @@
|
||||
3.14159265358979
|
||||
null
|
||||
null
|
||||
@@ -1,14 +0,0 @@
|
||||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a JSON number from number_integer_t
|
||||
json::number_integer_t value = 42;
|
||||
|
||||
json j(value);
|
||||
|
||||
// serialize the JSON numbers
|
||||
std::cout << j << '\n';
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user