Files
rapr-rs/docs/json/index.html
T
2021-03-26 19:20:48 +00:00

179 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `json` crate."><meta name="keywords" content="rust, rustlang, rust-lang, json"><title>json - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../json/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate json</p><div class="block version"><p>Version 0.12.4</p></div><div class="sidebar-elems"><a id="all-types" href="all.html"><p>See all json's items</p></a><div class="block items"><ul><li><a href="#reexports">Re-exports</a></li><li><a href="#modules">Modules</a></li><li><a href="#macros">Macros</a></li><li><a href="#enums">Enums</a></li><li><a href="#functions">Functions</a></li><li><a href="#types">Type Definitions</a></li></ul></div><p class="location"></p><div id="sidebar-vars" data-name="json" data-ty="mod" data-relpath="../"></div></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Crate <a class="mod" href="">json</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/json/lib.rs.html#1-429" title="goto source code">[src]</a></span></h1><div class="docblock"><p><img src="https://raw.githubusercontent.com/maciejhirsz/json-rust/master/json-rust-logo-small.png" alt="" /></p>
<h1 id="json-rust" class="section-header"><a href="#json-rust">json-rust</a></h1>
<p>Parse and serialize <a href="http://json.org/">JSON</a> with ease.</p>
<p><strong><a href="https://github.com/maciejhirsz/json-rust/releases">Changelog</a> -</strong>
<strong><a href="https://docs.rs/json/">Complete Documentation</a> -</strong>
<strong><a href="https://crates.io/crates/json">Cargo</a> -</strong>
<strong><a href="https://github.com/maciejhirsz/json-rust">Repository</a></strong></p>
<h2 id="why" class="section-header"><a href="#why">Why?</a></h2>
<p>JSON is a very loose format where anything goes - arrays can hold mixed
types, object keys can change types between API calls or not include
some keys under some conditions. Mapping that to idiomatic Rust structs
introduces friction.</p>
<p>This crate intends to avoid that friction.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">json</span>::<span class="ident">parse</span>(<span class="string">r#&quot;
{
&quot;code&quot;: 200,
&quot;success&quot;: true,
&quot;payload&quot;: {
&quot;features&quot;: [
&quot;awesome&quot;,
&quot;easyAPI&quot;,
&quot;lowLearningCurve&quot;
]
}
}
&quot;#</span>).<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">instantiated</span> <span class="op">=</span> <span class="macro">object</span><span class="macro">!</span>{
<span class="comment">// quotes on keys are optional</span>
<span class="string">&quot;code&quot;</span>: <span class="number">200</span>,
<span class="ident">success</span>: <span class="bool-val">true</span>,
<span class="ident">payload</span>: {
<span class="ident">features</span>: [
<span class="string">&quot;awesome&quot;</span>,
<span class="string">&quot;easyAPI&quot;</span>,
<span class="string">&quot;lowLearningCurve&quot;</span>
]
}
};
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="ident">instantiated</span>);</pre></div>
<h2 id="first-class-citizen" class="section-header"><a href="#first-class-citizen">First class citizen</a></h2>
<p>Using macros and indexing, it's easy to work with the data.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">data</span> <span class="op">=</span> <span class="macro">object</span><span class="macro">!</span>{
<span class="ident">foo</span>: <span class="bool-val">false</span>,
<span class="ident">bar</span>: <span class="ident">null</span>,
<span class="ident">answer</span>: <span class="number">42</span>,
<span class="ident">list</span>: [<span class="ident">null</span>, <span class="string">&quot;world&quot;</span>, <span class="bool-val">true</span>]
};
<span class="comment">// Partial equality is implemented for most raw types:</span>
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;foo&quot;</span>] <span class="op">=</span><span class="op">=</span> <span class="bool-val">false</span>);
<span class="comment">// And it&#39;s type aware, `null` and `false` are different values:</span>
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;bar&quot;</span>] <span class="op">!</span><span class="op">=</span> <span class="bool-val">false</span>);
<span class="comment">// But you can use any Rust number types:</span>
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;answer&quot;</span>] <span class="op">=</span><span class="op">=</span> <span class="number">42</span>);
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;answer&quot;</span>] <span class="op">=</span><span class="op">=</span> <span class="number">42.0</span>);
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;answer&quot;</span>] <span class="op">=</span><span class="op">=</span> <span class="number">42isize</span>);
<span class="comment">// Access nested structures, arrays and objects:</span>
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;list&quot;</span>][<span class="number">0</span>].<span class="ident">is_null</span>());
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;list&quot;</span>][<span class="number">1</span>] <span class="op">=</span><span class="op">=</span> <span class="string">&quot;world&quot;</span>);
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;list&quot;</span>][<span class="number">2</span>] <span class="op">=</span><span class="op">=</span> <span class="bool-val">true</span>);
<span class="comment">// Error resilient - accessing properties that don&#39;t exist yield null:</span>
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">data</span>[<span class="string">&quot;this&quot;</span>][<span class="string">&quot;does&quot;</span>][<span class="string">&quot;not&quot;</span>][<span class="string">&quot;exist&quot;</span>].<span class="ident">is_null</span>());
<span class="comment">// Mutate by assigning:</span>
<span class="ident">data</span>[<span class="string">&quot;list&quot;</span>][<span class="number">0</span>] <span class="op">=</span> <span class="string">&quot;Hello&quot;</span>.<span class="ident">into</span>();
<span class="comment">// Use the `dump` method to serialize the data:</span>
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">data</span>.<span class="ident">dump</span>(), <span class="string">r#&quot;{&quot;foo&quot;:false,&quot;bar&quot;:null,&quot;answer&quot;:42,&quot;list&quot;:[&quot;Hello&quot;,&quot;world&quot;,true]}&quot;#</span>);
<span class="comment">// Or pretty print it out:</span>
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:#}&quot;</span>, <span class="ident">data</span>);</pre></div>
<h2 id="serialize-with-jsonstringifyvalue" class="section-header"><a href="#serialize-with-jsonstringifyvalue">Serialize with <code>json::stringify(value)</code></a></h2>
<p>Primitives:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="comment">// str slices</span>
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="string">&quot;foobar&quot;</span>), <span class="string">&quot;\&quot;foobar\&quot;&quot;</span>);
<span class="comment">// Owned strings</span>
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="string">&quot;foobar&quot;</span>.<span class="ident">to_string</span>()), <span class="string">&quot;\&quot;foobar\&quot;&quot;</span>);
<span class="comment">// Any number types</span>
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="number">42</span>), <span class="string">&quot;42&quot;</span>);
<span class="comment">// Booleans</span>
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="bool-val">true</span>), <span class="string">&quot;true&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="bool-val">false</span>), <span class="string">&quot;false&quot;</span>);</pre></div>
<p>Explicit <code>null</code> type <code>json::Null</code>:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="ident">json</span>::<span class="ident">Null</span>), <span class="string">&quot;null&quot;</span>);</pre></div>
<p>Optional types:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="ident">value</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> <span class="op">=</span> <span class="prelude-val">Some</span>(<span class="string">&quot;foo&quot;</span>.<span class="ident">to_string</span>());
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="ident">value</span>), <span class="string">&quot;\&quot;foo\&quot;&quot;</span>);
<span class="kw">let</span> <span class="ident">no_value</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> <span class="op">=</span> <span class="prelude-val">None</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="ident">no_value</span>), <span class="string">&quot;null&quot;</span>);</pre></div>
<p>Vector:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>];
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="ident">data</span>), <span class="string">&quot;[1,2,3]&quot;</span>);</pre></div>
<p>Vector with optional values:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="macro">vec</span><span class="macro">!</span>[<span class="prelude-val">Some</span>(<span class="number">1</span>), <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="number">2</span>), <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="number">3</span>)];
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">json</span>::<span class="ident">stringify</span>(<span class="ident">data</span>), <span class="string">&quot;[1,null,2,null,3]&quot;</span>);</pre></div>
<p>Pushing to arrays:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">json</span>::<span class="ident">JsonValue</span>::<span class="ident">new_array</span>();
<span class="ident">data</span>.<span class="ident">push</span>(<span class="number">10</span>);
<span class="ident">data</span>.<span class="ident">push</span>(<span class="string">&quot;foo&quot;</span>);
<span class="ident">data</span>.<span class="ident">push</span>(<span class="bool-val">false</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">data</span>.<span class="ident">dump</span>(), <span class="string">r#&quot;[10,&quot;foo&quot;,false]&quot;#</span>);</pre></div>
<p>Putting fields on objects:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">json</span>::<span class="ident">JsonValue</span>::<span class="ident">new_object</span>();
<span class="ident">data</span>[<span class="string">&quot;answer&quot;</span>] <span class="op">=</span> <span class="number">42</span>.<span class="ident">into</span>();
<span class="ident">data</span>[<span class="string">&quot;foo&quot;</span>] <span class="op">=</span> <span class="string">&quot;bar&quot;</span>.<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">data</span>.<span class="ident">dump</span>(), <span class="string">r#&quot;{&quot;answer&quot;:42,&quot;foo&quot;:&quot;bar&quot;}&quot;#</span>);</pre></div>
<p><code>array!</code> macro:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="macro">array</span><span class="macro">!</span>[<span class="string">&quot;foo&quot;</span>, <span class="string">&quot;bar&quot;</span>, <span class="number">100</span>, <span class="bool-val">true</span>, <span class="ident">null</span>];
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">data</span>.<span class="ident">dump</span>(), <span class="string">r#&quot;[&quot;foo&quot;,&quot;bar&quot;,100,true,null]&quot;#</span>);</pre></div>
<p><code>object!</code> macro:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="macro">object</span><span class="macro">!</span>{
<span class="ident">name</span>: <span class="string">&quot;John Doe&quot;</span>,
<span class="ident">age</span>: <span class="number">30</span>,
<span class="ident">canJSON</span>: <span class="bool-val">true</span>
};
<span class="macro">assert_eq</span><span class="macro">!</span>(
<span class="ident">data</span>.<span class="ident">dump</span>(),
<span class="string">r#&quot;{&quot;name&quot;:&quot;John Doe&quot;,&quot;age&quot;:30,&quot;canJSON&quot;:true}&quot;#</span>
);</pre></div>
</div><h2 id="reexports" class="section-header"><a href="#reexports">Re-exports</a></h2>
<table><tr><td><code>pub use value::JsonValue::<a class="enum" href="../json/enum.JsonValue.html" title="enum json::JsonValue">Null</a>;</code></td></tr><tr><td><code>pub use crate::<a class="type" href="../json/type.Result.html" title="type json::Result">Result</a> as JsonResult;</code></td></tr></table><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
<table><tr class="module-item"><td><a class="mod" href="codegen/index.html" title="json::codegen mod">codegen</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="iterators/index.html" title="json::iterators mod">iterators</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="number/index.html" title="json::number mod">number</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="object/index.html" title="json::object mod">object</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="short/index.html" title="json::short mod">short</a></td><td class="docblock-short"></td></tr></table><h2 id="macros" class="section-header"><a href="#macros">Macros</a></h2>
<table><tr class="module-item"><td><a class="macro" href="macro.array.html" title="json::array macro">array</a></td><td class="docblock-short"><p>Helper macro for creating instances of <code>JsonValue::Array</code>.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.object.html" title="json::object macro">object</a></td><td class="docblock-short"><p>Helper macro for creating instances of <code>JsonValue::Object</code>.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.value.html" title="json::value macro">value</a></td><td class="docblock-short"><p>Helper crate for converting types into <code>JsonValue</code>. It's used
internally by the <code>object!</code> and <code>array!</code> macros.</p>
</td></tr></table><h2 id="enums" class="section-header"><a href="#enums">Enums</a></h2>
<table><tr class="module-item"><td><a class="enum" href="enum.Error.html" title="json::Error enum">Error</a></td><td class="docblock-short"><p>Error type of this crate.</p>
</td></tr><tr class="module-item"><td><a class="enum" href="enum.JsonError.html" title="json::JsonError enum">JsonError</a></td><td class="docblock-short"><p>Error type of this crate.</p>
</td></tr><tr class="module-item"><td><a class="enum" href="enum.JsonValue.html" title="json::JsonValue enum">JsonValue</a></td><td class="docblock-short"></td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
<table><tr class="module-item"><td><a class="fn" href="fn.from.html" title="json::from fn">from</a></td><td class="docblock-short"><p>Convenience for <code>JsonValue::from(value)</code></p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.parse.html" title="json::parse fn">parse</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="fn" href="fn.stringify.html" title="json::stringify fn">stringify</a></td><td class="docblock-short"><p>Pretty prints out the value as JSON string.</p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.stringify_pretty.html" title="json::stringify_pretty fn">stringify_pretty</a></td><td class="docblock-short"><p>Pretty prints out the value as JSON string. Second argument is a
number of spaces to indent new blocks with.</p>
</td></tr></table><h2 id="types" class="section-header"><a href="#types">Type Definitions</a></h2>
<table><tr class="module-item"><td><a class="type" href="type.Array.html" title="json::Array type">Array</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="type" href="type.Result.html" title="json::Result type">Result</a></td><td class="docblock-short"><p>Result type used by this crate.</p>
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="json"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>