Add three new example scripts demonstrating the fswatch, sysinfo, and udp modules with file watching, system metrics, and UDP echo server/client patterns. Reorder the manual API sidebar navigation to list modules alphabetically, removing deprecated entries like websocket, tls, net, json, regex, jinja, os, signal, subprocess, sqlite, and timer while adding argparse, dataset, fswatch, and html.
281 lines
12 KiB
HTML
281 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<!-- retoor <retoor@molodetz.nl> -->
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>json - Wren-CLI Manual</title>
|
|
<link rel="stylesheet" href="../css/style.css">
|
|
</head>
|
|
<body>
|
|
<button class="mobile-menu-toggle">Menu</button>
|
|
<div class="container">
|
|
<aside class="sidebar">
|
|
<div class="sidebar-header">
|
|
<h1><a href="../index.html">Wren-CLI</a></h1>
|
|
<div class="version">v0.4.0</div>
|
|
</div>
|
|
<nav class="sidebar-nav">
|
|
<div class="section">
|
|
<span class="section-title">Getting Started</span>
|
|
<ul>
|
|
<li><a href="../getting-started/index.html">Overview</a></li>
|
|
<li><a href="../getting-started/installation.html">Installation</a></li>
|
|
<li><a href="../getting-started/first-script.html">First Script</a></li>
|
|
<li><a href="../getting-started/repl.html">Using the REPL</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="section">
|
|
<span class="section-title">Language</span>
|
|
<ul>
|
|
<li><a href="../language/index.html">Syntax Overview</a></li>
|
|
<li><a href="../language/classes.html">Classes</a></li>
|
|
<li><a href="../language/methods.html">Methods</a></li>
|
|
<li><a href="../language/control-flow.html">Control Flow</a></li>
|
|
<li><a href="../language/fibers.html">Fibers</a></li>
|
|
<li><a href="../language/modules.html">Modules</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="section">
|
|
<span class="section-title">API Reference</span>
|
|
<ul>
|
|
<li><a href="index.html">Overview</a></li>
|
|
<li><a href="string.html">String</a></li>
|
|
<li><a href="number.html">Num</a></li>
|
|
<li><a href="argparse.html">argparse</a></li>
|
|
<li><a href="base64.html">base64</a></li>
|
|
<li><a href="crypto.html">crypto</a></li>
|
|
<li><a href="dataset.html">dataset</a></li>
|
|
<li><a href="datetime.html">datetime</a></li>
|
|
<li><a href="dns.html">dns</a></li>
|
|
<li><a href="env.html">env</a></li>
|
|
<li><a href="fswatch.html">fswatch</a></li>
|
|
<li><a href="html.html">html</a></li>
|
|
<li><a href="http.html">http</a></li>
|
|
<li><a href="io.html">io</a></li>
|
|
<li><a href="jinja.html">jinja</a></li>
|
|
<li><a href="json.html" class="active">json</a></li>
|
|
<li><a href="markdown.html">markdown</a></li>
|
|
<li><a href="math.html">math</a></li>
|
|
<li><a href="net.html">net</a></li>
|
|
<li><a href="os.html">os</a></li>
|
|
<li><a href="pathlib.html">pathlib</a></li>
|
|
<li><a href="regex.html">regex</a></li>
|
|
<li><a href="scheduler.html">scheduler</a></li>
|
|
<li><a href="signal.html">signal</a></li>
|
|
<li><a href="sqlite.html">sqlite</a></li>
|
|
<li><a href="subprocess.html">subprocess</a></li>
|
|
<li><a href="sysinfo.html">sysinfo</a></li>
|
|
<li><a href="tempfile.html">tempfile</a></li>
|
|
<li><a href="timer.html">timer</a></li>
|
|
<li><a href="tls.html">tls</a></li>
|
|
<li><a href="udp.html">udp</a></li>
|
|
<li><a href="uuid.html">uuid</a></li>
|
|
<li><a href="wdantic.html">wdantic</a></li>
|
|
<li><a href="web.html">web</a></li>
|
|
<li><a href="websocket.html">websocket</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="section">
|
|
<span class="section-title">Tutorials</span>
|
|
<ul>
|
|
<li><a href="../tutorials/index.html">Tutorial List</a></li>
|
|
<li><a href="../tutorials/http-client.html">HTTP Client</a></li>
|
|
<li><a href="../tutorials/websocket-chat.html">WebSocket Chat</a></li>
|
|
<li><a href="../tutorials/database-app.html">Database App</a></li>
|
|
<li><a href="../tutorials/template-rendering.html">Templates</a></li>
|
|
<li><a href="../tutorials/cli-tool.html">CLI Tool</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="section">
|
|
<span class="section-title">How-To Guides</span>
|
|
<ul>
|
|
<li><a href="../howto/index.html">How-To List</a></li>
|
|
<li><a href="../howto/http-requests.html">HTTP Requests</a></li>
|
|
<li><a href="../howto/json-parsing.html">JSON Parsing</a></li>
|
|
<li><a href="../howto/regex-patterns.html">Regex Patterns</a></li>
|
|
<li><a href="../howto/file-operations.html">File Operations</a></li>
|
|
<li><a href="../howto/async-operations.html">Async Operations</a></li>
|
|
<li><a href="../howto/error-handling.html">Error Handling</a></li>
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
</aside>
|
|
<main class="content">
|
|
<nav class="breadcrumb">
|
|
<a href="../index.html">Home</a>
|
|
<span class="separator">/</span>
|
|
<a href="index.html">API Reference</a>
|
|
<span class="separator">/</span>
|
|
<span>json</span>
|
|
</nav>
|
|
|
|
<article>
|
|
<h1>json</h1>
|
|
|
|
<p>The <code>json</code> module provides JSON parsing and stringification. It uses the cJSON library for parsing and implements stringify in Wren.</p>
|
|
|
|
<pre><code>import "json" for Json</code></pre>
|
|
|
|
<h2>Json Class</h2>
|
|
|
|
<div class="class-header">
|
|
<h3>Json</h3>
|
|
<p>JSON parsing and stringification</p>
|
|
</div>
|
|
|
|
<h3>Static Methods</h3>
|
|
|
|
<div class="method-signature">
|
|
<span class="method-name">Json.parse</span>(<span class="param">string</span>) → <span class="type">Map|List|String|Num|Bool|null</span>
|
|
</div>
|
|
<p>Parses a JSON string and returns the corresponding Wren value.</p>
|
|
<ul class="param-list">
|
|
<li><span class="param-name">string</span> <span class="param-type">(String)</span> - JSON string to parse</li>
|
|
<li><span class="returns">Returns:</span> Parsed value (Map, List, String, Num, Bool, or null)</li>
|
|
</ul>
|
|
<pre><code>var data = Json.parse('{"name": "Alice", "age": 30}')
|
|
System.print(data["name"]) // Alice
|
|
System.print(data["age"]) // 30
|
|
|
|
var list = Json.parse('[1, 2, 3]')
|
|
System.print(list[0]) // 1</code></pre>
|
|
|
|
<div class="method-signature">
|
|
<span class="method-name">Json.stringify</span>(<span class="param">value</span>) → <span class="type">String</span>
|
|
</div>
|
|
<p>Converts a Wren value to a JSON string (compact, no whitespace).</p>
|
|
<ul class="param-list">
|
|
<li><span class="param-name">value</span> <span class="param-type">(any)</span> - Value to stringify</li>
|
|
<li><span class="returns">Returns:</span> JSON string</li>
|
|
</ul>
|
|
<pre><code>var json = Json.stringify({"name": "Alice", "age": 30})
|
|
System.print(json) // {"name":"Alice","age":30}</code></pre>
|
|
|
|
<div class="method-signature">
|
|
<span class="method-name">Json.stringify</span>(<span class="param">value</span>, <span class="param">indent</span>) → <span class="type">String</span>
|
|
</div>
|
|
<p>Converts a Wren value to a formatted JSON string with indentation.</p>
|
|
<ul class="param-list">
|
|
<li><span class="param-name">value</span> <span class="param-type">(any)</span> - Value to stringify</li>
|
|
<li><span class="param-name">indent</span> <span class="param-type">(Num|String)</span> - Number of spaces or indent string</li>
|
|
<li><span class="returns">Returns:</span> Formatted JSON string</li>
|
|
</ul>
|
|
<pre><code>var json = Json.stringify({"name": "Alice"}, 2)
|
|
System.print(json)
|
|
// {
|
|
// "name": "Alice"
|
|
// }
|
|
|
|
var json2 = Json.stringify({"name": "Bob"}, "\t")
|
|
// Uses tab for indentation</code></pre>
|
|
|
|
<h2>Type Mapping</h2>
|
|
<table>
|
|
<tr>
|
|
<th>JSON Type</th>
|
|
<th>Wren Type</th>
|
|
</tr>
|
|
<tr>
|
|
<td>object</td>
|
|
<td>Map</td>
|
|
</tr>
|
|
<tr>
|
|
<td>array</td>
|
|
<td>List</td>
|
|
</tr>
|
|
<tr>
|
|
<td>string</td>
|
|
<td>String</td>
|
|
</tr>
|
|
<tr>
|
|
<td>number</td>
|
|
<td>Num</td>
|
|
</tr>
|
|
<tr>
|
|
<td>true/false</td>
|
|
<td>Bool</td>
|
|
</tr>
|
|
<tr>
|
|
<td>null</td>
|
|
<td>null</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>Examples</h2>
|
|
|
|
<h3>Parsing JSON</h3>
|
|
<pre><code>import "json" for Json
|
|
|
|
var jsonString = '{"users": [{"name": "Alice"}, {"name": "Bob"}]}'
|
|
var data = Json.parse(jsonString)
|
|
|
|
for (user in data["users"]) {
|
|
System.print("User: %(user["name"])")
|
|
}</code></pre>
|
|
|
|
<h3>Building and Stringifying</h3>
|
|
<pre><code>import "json" for Json
|
|
|
|
var data = {
|
|
"name": "Product",
|
|
"price": 29.99,
|
|
"tags": ["electronics", "sale"],
|
|
"inStock": true,
|
|
"metadata": null
|
|
}
|
|
|
|
System.print(Json.stringify(data, 2))</code></pre>
|
|
|
|
<h3>Nested Structures</h3>
|
|
<pre><code>import "json" for Json
|
|
|
|
var config = {
|
|
"server": {
|
|
"host": "localhost",
|
|
"port": 8080
|
|
},
|
|
"database": {
|
|
"url": "sqlite://data.db"
|
|
}
|
|
}
|
|
|
|
var json = Json.stringify(config)
|
|
System.print(json)
|
|
|
|
var parsed = Json.parse(json)
|
|
System.print(parsed["server"]["port"]) // 8080</code></pre>
|
|
|
|
<h3>Special Values</h3>
|
|
<pre><code>import "json" for Json
|
|
|
|
var special = {
|
|
"infinity": 1/0,
|
|
"nan": 0/0
|
|
}
|
|
|
|
System.print(Json.stringify(special))
|
|
// {"infinity":null,"nan":null}
|
|
// Infinity and NaN are converted to null</code></pre>
|
|
|
|
<div class="admonition note">
|
|
<div class="admonition-title">Note</div>
|
|
<p>Map keys are converted to strings in JSON output. Non-string keys will have their <code>toString</code> method called.</p>
|
|
</div>
|
|
|
|
<div class="admonition warning">
|
|
<div class="admonition-title">Warning</div>
|
|
<p>Invalid JSON strings will cause a runtime error. Use <code>Fiber.try()</code> to catch parsing errors.</p>
|
|
</div>
|
|
</article>
|
|
|
|
<footer class="page-footer">
|
|
<a href="dns.html" class="prev">dns</a>
|
|
<a href="base64.html" class="next">base64</a>
|
|
</footer>
|
|
</main>
|
|
</div>
|
|
<script src="../js/main.js"></script>
|
|
</body>
|
|
</html>
|