</code></pre></div></div></div></div></li><li><p>Passing iterator pairs or pointer/length pairs to parsing functions (<ahref=../../api/basic_json/parse/><code>parse</code></a>, <ahref=../../api/basic_json/accept/><code>accept</code></a>, <ahref=../../api/basic_json/sax_parse/><code>sax_parse</code></a>, <ahref=../../api/basic_json/from_cbor/><code>from_cbor</code></a>, <ahref=../../api/basic_json/from_msgpack/><code>from_msgpack</code></a>, <ahref=../../api/basic_json/from_ubjson/><code>from_ubjson</code></a>, and <ahref=../../api/basic_json/from_bson/><code>from_bson</code></a> via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call <code>from_cbor(ptr, ptr+len)</code> instead of <code>from_cbor({ptr, len})</code>.</p><divclass="tabbed-set tabbed-alternate"data-tabs=2:2><inputchecked=checkedid=__tabbed_2_1name=__tabbed_2type=radio><inputid=__tabbed_2_2name=__tabbed_2type=radio><divclass=tabbed-labels><labelfor=__tabbed_2_1>Deprecated</label><labelfor=__tabbed_2_2>Future-proof</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=k>const</span><spanclass=w></span><spanclass=kt>char</span><spanclass=o>*</span><spanclass=w></span><spanclass=n>s</span><spanclass=w></span><spanclass=o>=</span><spanclass=w></span><spanclass=s>"[1,2,3]"</span><spanclass=p>;</span>
</code></pre></div></div></div></div></li></ul><h4id=json-pointers>JSON Pointers<aclass=headerlinkhref=#json-pointerstitle="Permanent link">¶</a></h4><ul><li><p>Comparing JSON Pointers with strings via <ahref=../../api/json_pointer/operator_eq/><code>operator==</code></a> and <ahref=../../api/json_pointer/operator_ne/><code>operator!=</code></a> is deprecated since 3.11.2. To compare a <ahref=../../api/json_pointer/><code>json_pointer</code></a><code>p</code> with a string <code>s</code>, convert <code>s</code> to a <code>json_pointer</code> first and use <ahref=../../api/json_pointer/operator_eq/><code>json_pointer::operator==</code></a> or <ahref=../../api/json_pointer/operator_ne/><code>json_pointer::operator!=</code></a>.</p><divclass="tabbed-set tabbed-alternate"data-tabs=3:2><inputchecked=checkedid=__tabbed_3_1name=__tabbed_3type=radio><inputid=__tabbed_3_2name=__tabbed_3type=radio><divclass=tabbed-labels><labelfor=__tabbed_3_1>Deprecated</label><labelfor=__tabbed_3_2>Future-proof</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=n>nlohmann</span><spanclass=o>::</span><spanclass=n>json</span><spanclass=o>::</span><spanclass=n>json_pointer</span><spanclass=w></span><spanclass=n>lhs</span><spanclass=p>(</span><spanclass=s>"/foo/bar/1"</span><spanclass=p>);</span>
</code></pre></div></div></div></div></li><li><p>The implicit conversion from JSON Pointers to string (<ahref=../../api/json_pointer/operator_string_t/><code>json_pointer::operator string_t</code></a>) is deprecated since 3.11.0. Use <ahref=../../api/json_pointer/to_string/><code>json_pointer::to_string</code></a> instead.</p><divclass="tabbed-set tabbed-alternate"data-tabs=4:2><inputchecked=checkedid=__tabbed_4_1name=__tabbed_4type=radio><inputid=__tabbed_4_2name=__tabbed_4type=radio><divclass=tabbed-labels><labelfor=__tabbed_4_1>Deprecated</label><labelfor=__tabbed_4_2>Future-proof</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=n>nlohmann</span><spanclass=o>::</span><spanclass=n>json</span><spanclass=o>::</span><spanclass=n>json_pointer</span><spanclass=w></span><spanclass=n>ptr</span><spanclass=p>(</span><spanclass=s>"/foo/bar/1"</span><spanclass=p>);</span>
</code></pre></div></div></div></div></li><li><p>Passing a <code>basic_json</code> specialization as template parameter <code>RefStringType</code> to <ahref=../../api/json_pointer/><code>json_pointer</code></a> is deprecated since 3.11.0. The string type can now be directly provided.</p><divclass="tabbed-set tabbed-alternate"data-tabs=5:2><inputchecked=checkedid=__tabbed_5_1name=__tabbed_5type=radio><inputid=__tabbed_5_2name=__tabbed_5type=radio><divclass=tabbed-labels><labelfor=__tabbed_5_1>Deprecated</label><labelfor=__tabbed_5_2>Future-proof</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=k>using</span><spanclass=w></span><spanclass=n>my_json</span><spanclass=w></span><spanclass=o>=</span><spanclass=w></span><spanclass=n>nlohmann</span><spanclass=o>::</span><spanclass=n>basic_json</span><spanclass=o><</span><spanclass=n>std</span><spanclass=o>::</span><spanclass=n>map</span><spanclass=p>,</span><spanclass=w></span><spanclass=n>std</span><spanclass=o>::</span><spanclass=n>vector</span><spanclass=p>,</span><spanclass=w></span><spanclass=n>my_string_type</span><spanclass=o>></span><spanclass=p>;</span>
</code></pre></div></div></div></div><p>Thereby, <code>nlohmann::my_json::json_pointer</code> is an alias for <code>nlohmann::json_pointer<my_string_type></code> and is always an alias to the <code>json_pointer</code> with the appropriate string type for all specializations of <code>basic_json</code>.</p></li></ul><h4id=miscellaneous-functions>Miscellaneous functions<aclass=headerlinkhref=#miscellaneous-functionstitle="Permanent link">¶</a></h4><ul><li><p>The function <code>iterator_wrapper</code> is deprecated since 3.1.0. Please use the member function <ahref=../../api/basic_json/items/><code>items</code></a> instead.</p><divclass="tabbed-set tabbed-alternate"data-tabs=6:2><inputchecked=checkedid=__tabbed_6_1name=__tabbed_6type=radio><inputid=__tabbed_6_2name=__tabbed_6type=radio><divclass=tabbed-labels><labelfor=__tabbed_6_1>Deprecated</label><labelfor=__tabbed_6_2>Future-proof</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=k>for</span><spanclass=w></span><spanclass=p>(</span><spanclass=k>auto</span><spanclass=w></span><spanclass=o>&</span><spanclass=n>x</span><spanclass=w></span><spanclass=o>:</span><spanclass=w></span><spanclass=n>nlohmann</span><spanclass=o>::</span><spanclass=n>json</span><spanclass=o>::</span><spanclass=n>iterator_wrapper</span><spanclass=p>(</span><spanclass=n>j</span><spanclass=p>))</span>
</code></pre></div></div></div></div></li><li><p>The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining <ahref=../../api/macros/json_use_legacy_discarded_value_comparison/><code>JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON</code></a> to <code>1</code>.</p><divclass="tabbed-set tabbed-alternate"data-tabs=8:2><inputchecked=checkedid=__tabbed_8_1name=__tabbed_8type=radio><inputid=__tabbed_8_2name=__tabbed_8type=radio><divclass=tabbed-labels><labelfor=__tabbed_8_1>Deprecated</label><labelfor=__tabbed_8_2>Future-proof</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=cp>#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1</span>
</code></pre></div></div></div></div></li></ul><h2id=replace-implicit-conversions>Replace implicit conversions<aclass=headerlinkhref=#replace-implicit-conversionstitle="Permanent link">¶</a></h2><p>Implicit conversions via <ahref=../../api/basic_json/operator_ValueType/><code>operator ValueType</code></a> will be switched off by default in the next major release of the library.</p><p>You can prepare existing code by already defining <ahref=../../api/macros/json_use_implicit_conversions/><code>JSON_USE_IMPLICIT_CONVERSIONS</code></a> to <code>0</code> and replace any implicit conversions with calls to <ahref=../../api/basic_json/get/><code>get</code></a>, <ahref=../../api/basic_json/get_to/><code>get_to</code></a>, <ahref=../../api/basic_json/get_ref/><code>get_ref</code></a>, or <ahref=../../api/basic_json/get_ptr/><code>get_ptr</code></a>.</p><divclass="tabbed-set tabbed-alternate"data-tabs=9:3><inputchecked=checkedid=__tabbed_9_1name=__tabbed_9type=radio><inputid=__tabbed_9_2name=__tabbed_9type=radio><inputid=__tabbed_9_3name=__tabbed_9type=radio><divclass=tabbed-labels><labelfor=__tabbed_9_1>Deprecated</label><labelfor=__tabbed_9_2>Future-proof</label><labelfor=__tabbed_9_3>Future-proof (alternative)</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=n>nlohmann</span><spanclass=o>::</span><spanclass=n>json</span><spanclass=w></span><spanclass=n>j</span><spanclass=w></span><spanclass=o>=</span><spanclass=w></span><spanclass=s>"Hello, world!"</span><spanclass=p>;</span>
</code></pre></div></div></div></div><p>You can prepare existing code by already defining <ahref=../../api/macros/json_use_implicit_conversions/><code>JSON_USE_IMPLICIT_CONVERSIONS</code></a> to <code>0</code> and replace any implicit conversions with calls to <ahref=../../api/basic_json/get/><code>get</code></a>.</p><h2id=import-namespace-literals-for-udls>Import namespace <code>literals</code> for UDLs<aclass=headerlinkhref=#import-namespace-literals-for-udlstitle="Permanent link">¶</a></h2><p>The user-defined string literals <ahref=../../api/operator_literal_json/><code>operator""_json</code></a> and <ahref=../../api/operator_literal_json_pointer/><code>operator""_json_pointer</code></a> will be removed from the global namespace in the next major release of the library.</p><divclass="tabbed-set tabbed-alternate"data-tabs=10:2><inputchecked=checkedid=__tabbed_10_1name=__tabbed_10type=radio><inputid=__tabbed_10_2name=__tabbed_10type=radio><divclass=tabbed-labels><labelfor=__tabbed_10_1>Deprecated</label><labelfor=__tabbed_10_2>Future-proof</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=n>nlohmann</span><spanclass=o>::</span><spanclass=n>json</span><spanclass=w></span><spanclass=n>j</span><spanclass=w></span><spanclass=o>=</span><spanclass=w></span><spanclass=s>"[1,2,3]"</span><spanclass=n>_json</span><spanclass=p>;</span>
</code></pre></div></div></div></div><p>To prepare existing code, define <ahref=../../api/macros/json_use_global_udls/><code>JSON_USE_GLOBAL_UDLS</code></a> to <code>0</code> and bring the string literals into scope where needed.</p><h2id=do-not-hard-code-the-complete-library-namespace>Do not hard-code the complete library namespace<aclass=headerlinkhref=#do-not-hard-code-the-complete-library-namespacetitle="Permanent link">¶</a></h2><p>The <ahref=../../features/namespace/><code>nlohmann</code> namespace</a> contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use <code>nlohmann</code> as namespace or, when the exact version and configuration is relevant, use macro <ahref=../../api/macros/nlohmann_json_namespace/><code>NLOHMANN_JSON_NAMESPACE</code></a> to denote the namespace.</p><divclass="tabbed-set tabbed-alternate"data-tabs=11:3><inputchecked=checkedid=__tabbed_11_1name=__tabbed_11type=radio><inputid=__tabbed_11_2name=__tabbed_11type=radio><inputid=__tabbed_11_3name=__tabbed_11type=radio><divclass=tabbed-labels><labelfor=__tabbed_11_1>Dangerous</label><labelfor=__tabbed_11_2>Future-proof</label><labelfor=__tabbed_11_3>Future-proof (alternative)</label></div><divclass=tabbed-content><divclass=tabbed-block><divclass=highlight><pre><span></span><code><spanclass=kt>void</span><spanclass=w></span><spanclass=nf>to_json</span><spanclass=p>(</span><spanclass=n>nlohmann</span><spanclass=o>::</span><spanclass=n>json_abi_v3_11_2</span><spanclass=o>::</span><spanclass=n>json</span><spanclass=o>&</span><spanclass=w></span><spanclass=n>j</span><spanclass=p>,</span><spanclass=w></span><spanclass=k>const</span><spanclass=w></span><spanclass=n>person</span><spanclass=o>&</span><spanclass=w></span><spanclass=n>p</span><spanclass=p>)</span>