JSON Class
Parse and stringify JSON data. Built with Rust's serde_json for high performance.
~1.2x slower than Ruby (benchmark: 10k stringify + parse in 18ms)
JSON.parse(string)
JSON.parse(string)
Parse a JSON string into a Soli value (Hash, Array, String, Int, Float, Bool, or null).
Parameters
string : String - A valid JSON string
Returns
Any - The parsed value
data = JSON.parse('{"name": "Alice", "age": 30}')
println(data["name"]) # "Alice"
numbers = JSON.parse('[1, 2, 3, 4, 5]')
println(numbers[0]) # 1
JSON.stringify(value)
JSON.stringify(value)
Serialize a Soli value to a JSON string.
Parameters
value : Any - A JSON-compatible value (Hash, Array, String, Int, Float, Bool, null)
Returns
String - The JSON string representation
json = JSON.stringify({ "name": "Alice", "scores": [95, 87] })
println(json) # {"name":"Alice","scores":[95,87]}
arr = JSON.stringify([1, 2, 3])
println(arr) # [1,2,3]
JSON.parse_jsonp(string)
JSON.parse_jsonp(string)
Unwrap a JSONP callback({...}); string (with an optional leading /**/ guard) and parse the inner JSON into a Soli value. Pairs with HTTP.get_jsonp for consuming legacy cross-origin APIs.
Parameters
string : String - A JSONP response body
Returns
Any - The parsed value. Raises if the string is not a valid callback(...) wrapper or the inner JSON is malformed.
data = JSON.parse_jsonp('/**/cb({"name": "Alice", "age": 30});')
println(data["name"]) # "Alice"
Common Patterns
Reading and Writing JSON Files
# Read JSON file
config = JSON.parse(slurp("config.json"))
println(config["database"]["host"])
# Write JSON file
data = { "users": [{ "name": "Alice" }] }
barf("data.json", JSON.stringify(data))