deploy: 81888ff9f0
This commit is contained in:
1 parent
0c4c69e37d
commit
9f62284716
22 files changed
+138
-88
No files matched your search
@@ -204,7 +204,10 @@ of the message are reported as [parse_error.110](../../home/exceptions.md#jsonex
|
||||
arrays and objects with up to four elements that are terminated by 0xFE, unsorted object keys, or a 0xFF after a
|
||||
string that would also end without it, are accepted. A second 0xFF is not a terminator but an empty string.
|
||||
|
||||
Strings must be valid UTF-8, and a string at the very end of a message must be terminated by 0xFF.
|
||||
Strings must be valid UTF-8, and a string at the very end of a message must be terminated by 0xFF. This also
|
||||
holds when `strict` is false and more data follows the value: the byte that would end the string belongs to the
|
||||
next value, and reading it would remove it from the input, so the missing 0xFF is reported as
|
||||
[parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110).
|
||||
|
||||
Duplicate object keys are accepted; the last value wins (`ordered_json` keeps the position of the first occurrence).
|
||||
The specification does not say how to treat them; the HikoGUI reference decoder keeps the first value.
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<span class=w> </span><span class=n>std</span><span class=o>::</span><span class=n>cout</span><span class=w> </span><span class=o><<</span><span class=w> </span><span class=sc>'\n'</span><span class=p>;</span>
|
||||
<span class=p>}</span>
|
||||
</code></pre></div> <p>Output:</p> <div class=highlight><pre><span></span><code><span class=mh>0x89</span><span class=w> </span><span class=mh>0x63</span><span class=w> </span><span class=mh>0x6f</span><span class=w> </span><span class=mh>0x6d</span><span class=w> </span><span class=mh>0x70</span><span class=w> </span><span class=mh>0x61</span><span class=w> </span><span class=mh>0x63</span><span class=w> </span><span class=mh>0x74</span><span class=w> </span><span class=mh>0xf9</span><span class=w> </span><span class=mh>0x66</span><span class=w> </span><span class=mh>0x6f</span><span class=w> </span><span class=mh>0x72</span><span class=w> </span><span class=mh>0x6d</span><span class=w> </span><span class=mh>0x61</span><span class=w> </span><span class=mh>0x74</span><span class=w> </span><span class=mh>0xff</span><span class=w> </span><span class=mh>0x42</span><span class=w> </span><span class=mh>0x4f</span><span class=w> </span><span class=mh>0x4e</span><span class=w> </span><span class=mh>0x38</span><span class=w> </span><span class=mh>0xff</span><span class=w> </span><span class=mh>0x73</span><span class=w> </span><span class=mh>0x63</span><span class=w> </span><span class=mh>0x68</span><span class=w> </span><span class=mh>0x65</span><span class=w> </span><span class=mh>0x6d</span><span class=w> </span><span class=mh>0x61</span><span class=w> </span><span class=mh>0x90</span><span class=w> </span>
|
||||
</code></pre></div> </details> <h2 id=deserialization>Deserialization<a class=headerlink href=#deserialization title="Permanent link">¶</a></h2> <p>The library maps <abbr title="Binary Object Notation 8">BON8</abbr> types to <abbr title="JavaScript Object Notation">JSON</abbr> value types as follows:</p> <table> <thead> <tr> <th><abbr title="Binary Object Notation 8">BON8</abbr> type</th> <th><abbr title="JavaScript Object Notation">JSON</abbr> value type</th> <th>first byte</th> </tr> </thead> <tbody> <tr> <td><abbr title="Unicode Transformation Format">UTF</abbr>-8 string</td> <td>string</td> <td>0x00..0x7F</td> </tr> <tr> <td>array with count</td> <td>array</td> <td>0x80..0x84</td> </tr> <tr> <td>array (terminated by 0xFE)</td> <td>array</td> <td>0x85</td> </tr> <tr> <td>object with count</td> <td>object</td> <td>0x86..0x8A</td> </tr> <tr> <td>object (terminated by 0xFE)</td> <td>object</td> <td>0x8B</td> </tr> <tr> <td>int32</td> <td>number_unsigned or number_integer</td> <td>0x8C</td> </tr> <tr> <td>int64</td> <td>number_unsigned or number_integer</td> <td>0x8D</td> </tr> <tr> <td>binary32</td> <td>number_float</td> <td>0x8E</td> </tr> <tr> <td>binary64</td> <td>number_float</td> <td>0x8F</td> </tr> <tr> <td>1-byte positive integer</td> <td>number_unsigned</td> <td>0x90..0xB7</td> </tr> <tr> <td>1-byte negative integer</td> <td>number_integer</td> <td>0xB8..0xC1</td> </tr> <tr> <td><abbr title="Unicode Transformation Format">UTF</abbr>-8 string</td> <td>string</td> <td>0xC2..0xF4, followed by 0x80..0xBF</td> </tr> <tr> <td>2- to 4-byte positive integer</td> <td>number_unsigned</td> <td>0xC2..0xF7, followed by 0x00..0x7F</td> </tr> <tr> <td>2- to 4-byte negative integer</td> <td>number_integer</td> <td>0xC2..0xF7, followed by 0xC0..0xFF</td> </tr> <tr> <td>false</td> <td><code>false</code></td> <td>0xF8</td> </tr> <tr> <td>true</td> <td><code>true</code></td> <td>0xF9</td> </tr> <tr> <td>null</td> <td><code>null</code></td> <td>0xFA</td> </tr> <tr> <td>-1.0</td> <td>number_float</td> <td>0xFB</td> </tr> <tr> <td>0.0</td> <td>number_float</td> <td>0xFC</td> </tr> <tr> <td>1.0</td> <td>number_float</td> <td>0xFD</td> </tr> <tr> <td>empty string</td> <td>string</td> <td>0xFF</td> </tr> </tbody> </table> <p>Non-negative integers are read as number_unsigned, negative integers as number_integer.</p> <p>A byte 0xF5..0xF7 followed by 0x80..0xBF is neither a string nor an integer and is rejected with <a href=../../../home/exceptions/#jsonexceptionparse_error112>parse_error.112</a> (invalid <abbr title="Unicode Transformation Format">UTF</abbr>-8 byte). The same error is reported for any other invalid byte (such as a stray 0xFE), for ill-formed <abbr title="Unicode Transformation Format">UTF</abbr>-8, and for an object key that is not a string. Input that ends prematurely, trailing data after the value, and a missing final 0xFF after a string at the end of the message are reported as <a href=../../../home/exceptions/#jsonexceptionparse_error110>parse_error.110</a>.</p> <div class="admonition info"> <p class=admonition-title>Non-canonical input</p> <p>Values that do not use the canonical representation, such as integers with a longer encoding than necessary, arrays and objects with up to four elements that are terminated by 0xFE, unsorted object keys, or a 0xFF after a string that would also end without it, are accepted. A second 0xFF is not a terminator but an empty string.</p> <p>Strings must be valid <abbr title="Unicode Transformation Format">UTF</abbr>-8, and a string at the very end of a message must be terminated by 0xFF.</p> <p>Duplicate object keys are accepted; the last value wins (<code>ordered_json</code> keeps the position of the first occurrence). The specification does not say how to treat them; the HikoGUI reference decoder keeps the first value.</p> </div> <div class="admonition info"> <p class=admonition-title>Round trips</p> <p>Any <abbr title="Binary Object Notation 8">BON8</abbr> output created by <code>to_bon8</code> can be successfully parsed by <code>from_bon8</code>.</p> </div> <details class=example> <summary>Example: deserialize a <abbr title="JavaScript Object Notation">JSON</abbr> value from <abbr title="Binary Object Notation 8">BON8</abbr></summary> <div class=highlight><pre><span></span><code><span class=cp>#include</span><span class=w> </span><span class=cpf><iostream></span>
|
||||
</code></pre></div> </details> <h2 id=deserialization>Deserialization<a class=headerlink href=#deserialization title="Permanent link">¶</a></h2> <p>The library maps <abbr title="Binary Object Notation 8">BON8</abbr> types to <abbr title="JavaScript Object Notation">JSON</abbr> value types as follows:</p> <table> <thead> <tr> <th><abbr title="Binary Object Notation 8">BON8</abbr> type</th> <th><abbr title="JavaScript Object Notation">JSON</abbr> value type</th> <th>first byte</th> </tr> </thead> <tbody> <tr> <td><abbr title="Unicode Transformation Format">UTF</abbr>-8 string</td> <td>string</td> <td>0x00..0x7F</td> </tr> <tr> <td>array with count</td> <td>array</td> <td>0x80..0x84</td> </tr> <tr> <td>array (terminated by 0xFE)</td> <td>array</td> <td>0x85</td> </tr> <tr> <td>object with count</td> <td>object</td> <td>0x86..0x8A</td> </tr> <tr> <td>object (terminated by 0xFE)</td> <td>object</td> <td>0x8B</td> </tr> <tr> <td>int32</td> <td>number_unsigned or number_integer</td> <td>0x8C</td> </tr> <tr> <td>int64</td> <td>number_unsigned or number_integer</td> <td>0x8D</td> </tr> <tr> <td>binary32</td> <td>number_float</td> <td>0x8E</td> </tr> <tr> <td>binary64</td> <td>number_float</td> <td>0x8F</td> </tr> <tr> <td>1-byte positive integer</td> <td>number_unsigned</td> <td>0x90..0xB7</td> </tr> <tr> <td>1-byte negative integer</td> <td>number_integer</td> <td>0xB8..0xC1</td> </tr> <tr> <td><abbr title="Unicode Transformation Format">UTF</abbr>-8 string</td> <td>string</td> <td>0xC2..0xF4, followed by 0x80..0xBF</td> </tr> <tr> <td>2- to 4-byte positive integer</td> <td>number_unsigned</td> <td>0xC2..0xF7, followed by 0x00..0x7F</td> </tr> <tr> <td>2- to 4-byte negative integer</td> <td>number_integer</td> <td>0xC2..0xF7, followed by 0xC0..0xFF</td> </tr> <tr> <td>false</td> <td><code>false</code></td> <td>0xF8</td> </tr> <tr> <td>true</td> <td><code>true</code></td> <td>0xF9</td> </tr> <tr> <td>null</td> <td><code>null</code></td> <td>0xFA</td> </tr> <tr> <td>-1.0</td> <td>number_float</td> <td>0xFB</td> </tr> <tr> <td>0.0</td> <td>number_float</td> <td>0xFC</td> </tr> <tr> <td>1.0</td> <td>number_float</td> <td>0xFD</td> </tr> <tr> <td>empty string</td> <td>string</td> <td>0xFF</td> </tr> </tbody> </table> <p>Non-negative integers are read as number_unsigned, negative integers as number_integer.</p> <p>A byte 0xF5..0xF7 followed by 0x80..0xBF is neither a string nor an integer and is rejected with <a href=../../../home/exceptions/#jsonexceptionparse_error112>parse_error.112</a> (invalid <abbr title="Unicode Transformation Format">UTF</abbr>-8 byte). The same error is reported for any other invalid byte (such as a stray 0xFE), for ill-formed <abbr title="Unicode Transformation Format">UTF</abbr>-8, and for an object key that is not a string. Input that ends prematurely, trailing data after the value, and a missing final 0xFF after a string at the end of the message are reported as <a href=../../../home/exceptions/#jsonexceptionparse_error110>parse_error.110</a>.</p> <div class="admonition info"> <p class=admonition-title>Non-canonical input</p> <p>Values that do not use the canonical representation, such as integers with a longer encoding than necessary, arrays and objects with up to four elements that are terminated by 0xFE, unsorted object keys, or a 0xFF after a string that would also end without it, are accepted. A second 0xFF is not a terminator but an empty string.</p> <p>Strings must be valid <abbr title="Unicode Transformation Format">UTF</abbr>-8, and a string at the very end of a message must be terminated by 0xFF. This also holds when <code>strict</code> is false and more data follows the value: the byte that would end the string belongs to the next value, and reading it would remove it from the input, so the missing 0xFF is reported as <a href=../../../home/exceptions/#jsonexceptionparse_error110>parse_error.110</a>.</p> <p>Duplicate object keys are accepted; the last value wins (<code>ordered_json</code> keeps the position of the first occurrence). The specification does not say how to treat them; the HikoGUI reference decoder keeps the first value.</p> </div> <div class="admonition info"> <p class=admonition-title>Round trips</p> <p>Any <abbr title="Binary Object Notation 8">BON8</abbr> output created by <code>to_bon8</code> can be successfully parsed by <code>from_bon8</code>.</p> </div> <details class=example> <summary>Example: deserialize a <abbr title="JavaScript Object Notation">JSON</abbr> value from <abbr title="Binary Object Notation 8">BON8</abbr></summary> <div class=highlight><pre><span></span><code><span class=cp>#include</span><span class=w> </span><span class=cpf><iostream></span>
|
||||
<span class=cp>#include</span><span class=w> </span><span class=cpf><iomanip></span>
|
||||
<span class=cp>#include</span><span class=w> </span><span class=cpf><nlohmann/json.hpp></span>
|
||||
|
||||
@@ -56,4 +56,4 @@
|
||||
<span class=w> </span><span class=nt>"format"</span><span class=p>:</span><span class=w> </span><span class=s2>"BON8"</span><span class=p>,</span>
|
||||
<span class=w> </span><span class=nt>"schema"</span><span class=p>:</span><span class=w> </span><span class=mi>0</span>
|
||||
<span class=p>}</span>
|
||||
</code></pre></div> </details> <h2 id=see-also>See also<a class=headerlink href=#see-also title="Permanent link">¶</a></h2> <ul> <li><a href=../ >Binary formats</a> - overview and comparison of the supported binary formats</li> <li><a href=../../binary_values/ >Binary values</a> - how binary values and subtypes map to <abbr title="Binary Object Notation 8">BON8</abbr></li> <li><a href=../../../api/basic_json/to_bon8/ ><code>to_bon8</code></a> - serialize a <abbr title="JavaScript Object Notation">JSON</abbr> value to <abbr title="Binary Object Notation 8">BON8</abbr></li> <li><a href=../../../api/basic_json/from_bon8/ ><code>from_bon8</code></a> - parse a <abbr title="JavaScript Object Notation">JSON</abbr> value from <abbr title="Binary Object Notation 8">BON8</abbr></li> <li><a href=../../../api/macros/json_strict_binary_utf8/ ><code>JSON_STRICT_BINARY_UTF8</code></a> - reject ill-formed <abbr title="Unicode Transformation Format">UTF</abbr>-8 in strings</li> <li><a href=../../parsing/sax_interface/ ><abbr title="Simple API for XML">SAX</abbr> interface</a> - decode binary formats without building a value</li> </ul> <!-- https://squidfunk.github.io/mkdocs-material/reference/tooltips/#adding-a-glossary --> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="October 27, 2026 06:41:42 UTC">October 27, 2026</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../bjdata/ class="md-footer__link md-footer__link--prev" aria-label="Previous: BJData"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> BJData </div> </div> </a> <a href=../bson/ class="md-footer__link md-footer__link--next" aria-label="Next: BSON"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> BSON </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright © 2013-2026 Niels Lohmann </div> </div> <div class=md-social> <a href="https://github.com/nlohmann" target="_blank" rel="noopener" title="github.com" class="md-social__link"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46Line truncated
|
||||
</code></pre></div> </details> <h2 id=see-also>See also<a class=headerlink href=#see-also title="Permanent link">¶</a></h2> <ul> <li><a href=../ >Binary formats</a> - overview and comparison of the supported binary formats</li> <li><a href=../../binary_values/ >Binary values</a> - how binary values and subtypes map to <abbr title="Binary Object Notation 8">BON8</abbr></li> <li><a href=../../../api/basic_json/to_bon8/ ><code>to_bon8</code></a> - serialize a <abbr title="JavaScript Object Notation">JSON</abbr> value to <abbr title="Binary Object Notation 8">BON8</abbr></li> <li><a href=../../../api/basic_json/from_bon8/ ><code>from_bon8</code></a> - parse a <abbr title="JavaScript Object Notation">JSON</abbr> value from <abbr title="Binary Object Notation 8">BON8</abbr></li> <li><a href=../../../api/macros/json_strict_binary_utf8/ ><code>JSON_STRICT_BINARY_UTF8</code></a> - reject ill-formed <abbr title="Unicode Transformation Format">UTF</abbr>-8 in strings</li> <li><a href=../../parsing/sax_interface/ ><abbr title="Simple API for XML">SAX</abbr> interface</a> - decode binary formats without building a value</li> </ul> <!-- https://squidfunk.github.io/mkdocs-material/reference/tooltips/#adding-a-glossary --> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="November 13, 2026 16:54:30 UTC">November 13, 2026</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../bjdata/ class="md-footer__link md-footer__link--prev" aria-label="Previous: BJData"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> BJData </div> </div> </a> <a href=../bson/ class="md-footer__link md-footer__link--next" aria-label="Next: BSON"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> BSON </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright © 2013-2026 Niels Lohmann </div> </div> <div class=md-social> <a href="https://github.com/nlohmann" target="_blank" rel="noopener" title="github.com" class="md-social__link"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 Line truncated
|
||||
@@ -179,7 +179,7 @@ Non-canonical input
|
||||
|
||||
Values that do not use the canonical representation, such as integers with a longer encoding than necessary, arrays and objects with up to four elements that are terminated by 0xFE, unsorted object keys, or a 0xFF after a string that would also end without it, are accepted. A second 0xFF is not a terminator but an empty string.
|
||||
|
||||
Strings must be valid UTF-8, and a string at the very end of a message must be terminated by 0xFF.
|
||||
Strings must be valid UTF-8, and a string at the very end of a message must be terminated by 0xFF. This also holds when `strict` is false and more data follows the value: the byte that would end the string belongs to the next value, and reading it would remove it from the input, so the missing 0xFF is reported as [parse_error.110](https://json.nlohmann.me/home/exceptions/#jsonexceptionparse_error110).
|
||||
|
||||
Duplicate object keys are accepted; the last value wins (`ordered_json` keeps the position of the first occurrence). The specification does not say how to treat them; the HikoGUI reference decoder keeps the first value.
|
||||
|
||||
|
||||
Reference in new issue
Block a user