json
JSON parsing and serialization. Built on cJSON (MIT license).
| Version | v0.1 |
| Platform | PC, ESP32 |
| Type | Native (C) |
star.mod
Usage
Functions
Parsing
| Function | Signature | Description |
|---|---|---|
json.parse(src) |
(string) -> dict |
Parse JSON object string into dict |
json.parseArray(src) |
(string) -> array |
Parse JSON array string into array |
var obj: dict = json.parse("{\"name\":\"star\",\"version\":1}")
assert(obj["name"] == "star")
assert(obj["version"] == 1)
var arr: array = json.parseArray("[10, 20, 30]")
assert(arr.len() == 3)
assert(arr[0] == 10)
Use json.parse when the root JSON value is an object, json.parseArray when it is an array.
Type Mapping
JSON values are converted to StarLang types:
| JSON | StarLang |
|---|---|
"string" |
string |
123, 3.14 |
number |
true, false |
bool |
null |
nil |
[...] |
array |
{...} |
dict |
Nested objects and arrays are converted recursively.
Serialization
| Function | Signature | Description |
|---|---|---|
json.stringify(val) |
(dict) -> string |
Serialize dict to compact JSON string |
json.stringifyArray(val) |
(array) -> string |
Serialize array to compact JSON string |
json.pretty(val) |
(dict) -> string |
Serialize dict to indented JSON string |
var obj: dict = {"name": "star", "version": 1}
var s: string = json.stringify(obj)
# {"name":"star","version":1}
var p: string = json.pretty(obj)
# {
# "name": "star",
# "version": 1
# }
var arr: array = [1, 2, 3]
var a: string = json.stringifyArray(arr)
# [1,2,3]
Helpers
| Function | Signature | Description |
|---|---|---|
json.has(obj, key) |
(dict, string) -> bool |
Check if key exists in dict |
json.get(obj, key) |
(dict, string) -> string |
Get string value by key |
var obj: dict = json.parse("{\"name\":\"star\",\"count\":42}")
if (json.has(obj, "name")) {
var name: string = json.get(obj, "name")
}
# For non-string values, use dict subscript access:
var count: number = obj["count"]
json.get is typed as returning string. For number, bool, or nested values, use dict subscript access (obj["key"]) directly.
Roundtrip
Parse and stringify are complementary — data survives a roundtrip:
var src: string = "{\"x\":42,\"y\":true}"
var parsed: dict = json.parse(src)
var back: string = json.stringify(parsed)
var reparsed: dict = json.parse(back)
assert(reparsed["x"] == 42)
assert(reparsed["y"] == true)
Notes
- Invalid JSON input causes
json.parseto returnnil json.stringifyoutputs compact JSON (no whitespace)json.prettyoutputs indented JSON (4 spaces)- String escapes (
\",\\,\n,\t,\uXXXX) are handled by cJSON - On ESP32, cJSON is already part of ESP-IDF — no extra dependency