</code></pre></div><p>Then every value inside the JSON document can be identified as follows:</p><table><thead><tr><th>JSON Pointer</th><th>JSON value</th></tr></thead><tbody><tr><td>``</td><td><codeclass=highlight><spanclass=p>{</span><spanclass=nt>"array"</span><spanclass=p>:[</span><spanclass=s2>"A"</span><spanclass=p>,</span><spanclass=s2>"B"</span><spanclass=p>,</span><spanclass=s2>"C"</span><spanclass=p>],</span><spanclass=nt>"nested"</span><spanclass=p>:{</span><spanclass=nt>"one"</span><spanclass=p>:</span><spanclass=mi>1</span><spanclass=p>,</span><spanclass=nt>"two"</span><spanclass=p>:</span><spanclass=mi>2</span><spanclass=p>,</span><spanclass=nt>"three"</span><spanclass=p>:[</span><spanclass=kc>true</span><spanclass=p>,</span><spanclass=kc>false</span><spanclass=p>]}}</span><spanclass=w></span></code></td></tr><tr><td><code>/array</code></td><td><codeclass=highlight><spanclass=p>[</span><spanclass=s2>"A"</span><spanclass=p>,</span><spanclass=s2>"B"</span><spanclass=p>,</span><spanclass=s2>"C"</span><spanclass=p>]</span><spanclass=w></span></code></td></tr><tr><td><code>/array/0</code></td><td><codeclass=highlight><spanclass=err>A</span><spanclass=w></span></code></td></tr><tr><td><code>/array/1</code></td><td><codeclass=highlight><spanclass=err>B</span><spanclass=w></span></code></td></tr><tr><td><code>/array/2</code></td><td><codeclass=highlight><spanclass=err>C</span><spanclass=w></span></code></td></tr><tr><td><code>/nested</code></td><td><codeclass=highlight><spanclass=p>{</span><spanclass=nt>"one"</span><spanclass=p>:</span><spanclass=mi>1</span><spanclass=p>,</span><spanclass=nt>"two"</span><spanclass=p>:</span><spanclass=mi>2</span><spanclass=p>,</span><spanclass=nt>"three"</span><spanclass=p>:[</span><spanclass=kc>true</span><spanclass=p>,</span><spanclass=kc>false</span><spanclass=p>]}</span><spanclass=w></span></code></td></tr><tr><td><code>/nested/one</code></td><td><codeclass=highlight><spanclass=mi>1</span><spanclass=w></span></code></td></tr><tr><td><code>/nested/two</code></td><td><codeclass=highlight><spanclass=mi>2</span><spanclass=w></span></code></td></tr><tr><td><code>/nested/three</code></td><td><codeclass=highlight><spanclass=p>[</span><spanclass=kc>true</span><spanclass=p>,</span><spanclass=kc>false</span><spanclass=p>]</span><spanclass=w></span></code></td></tr><tr><td><code>/nested/three/0</code></td><td><codeclass=highlight><spanclass=kc>true</span><spanclass=w></span></code></td></tr><tr><td><code>/nested/three/1</code></td><td><codeclass=highlight><spanclass=kc>false</span><spanclass=w></span></code></td></tr></tbody></table><p>Note <code>/</code> does not identify the root (i.e., the whole document), but an object entry with empty key <code>""</code>. See <ahref=https://tools.ietf.org/html/rfc6901>RFC 6901</a> for more information.</p><h2id=json-pointer-creation>JSON Pointer creation<aclass=headerlinkhref=#json-pointer-creationtitle="Permanent link">¶</a></h2><p>JSON Pointers can be created from a string:</p><divclass=highlight><pre><span></span><code><spanclass=n>json</span><spanclass=o>::</span><spanclass=n>json_pointer</span><spanclass=w></span><spanclass=n>p</span><spanclass=w></span><spanclass=o>=</span><spanclass=w></span><spanclass=s>"/nested/one"</span><spanclass=p>;</span><spanclass=w></span>
</code></pre></div><p>Furthermore, a user-defined string literal can be used to achieve the same result:</p><divclass=highlight><pre><span></span><code><spanclass=k>auto</span><spanclass=w></span><spanclass=n>p</span><spanclass=w></span><spanclass=o>=</span><spanclass=w></span><spanclass=s>"/nested/one"</span><spanclass=n>_json_pointer</span><spanclass=p>;</span><spanclass=w></span>
</code></pre></div><p>The escaping rules of <ahref=https://tools.ietf.org/html/rfc6901>RFC 6901</a> are implemented. See the <ahref=../../api/json_pointer/json_pointer/>constructor documentation</a> for more information.</p><h2id=value-access>Value access<aclass=headerlinkhref=#value-accesstitle="Permanent link">¶</a></h2><p>JSON Pointers can be used in the <ahref=../../api/basic_json/at/><code>at</code></a>, <ahref=../../api/basic_json/operator%5B%5D/><code>operator[]</code></a>, and <ahref=../../api/basic_json/value/><code>value</code></a> functions just like object keys or array indices.</p><divclass=highlight><pre><span></span><code><spanclass=c1>// the JSON value from above</span>
</code></pre></div><h2id=flatten-unflatten>Flatten / unflatten<aclass=headerlinkhref=#flatten-unflattentitle="Permanent link">¶</a></h2><p>The library implements a function <ahref=../../api/basic_json/flatten/><code>flatten</code></a> to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).</p><divclass=highlight><pre><span></span><code><spanclass=c1>// the JSON value from above</span>
</code></pre></div><p>The resulting value <code>j_flat</code> is:</p><divclass=highlight><pre><span></span><code><spanclass=p>{</span><spanclass=w></span>
</code></pre></div><p>The reverse function, <ahref=../../api/basic_json/unflatten/><code>unflatten</code></a> recreates the original value.</p><divclass=highlight><pre><span></span><code><spanclass=k>auto</span><spanclass=w></span><spanclass=n>j_original</span><spanclass=w></span><spanclass=o>=</span><spanclass=w></span><spanclass=n>j_flat</span><spanclass=p>.</span><spanclass=n>unflatten</span><spanclass=p>();</span><spanclass=w></span>