JSON Support
Astra parses JSON directly into Chains — no third-party libraries, no custom types, no boilerplate. A JSON object becomes a named-field chain. A JSON array becomes a simple chain. Nested objects become nested fields.
📄
JSON string
raw text or file
⚡
parseJson()
parse into chain
⛓️
Chain access
name1:field
parseJson()
parseJson(chainName, jsonText) parses a JSON string and stores the result as a chain. The first argument is the name you want to give the chain.
JSON input
{
"name": "Ravi",
"age": 25
}
Astra access
write data1:name // Ravi
write data1:age // 25
jsonText = "{"name":"Ravi","age":25}"
parseJson("data", jsonText)
write data1:name \\ Ravi
write data1:age \\ 25
💡 parseJson always creates index-1 based entries — data1, data2, etc. — just like regular chains.
Accessing Fields
After parsing, access fields exactly like named-field chains — using chainName[index]:field or chainName1:field.
parseJson("user", "{"name":"Ravi","age":25,"city":"Hyderabad"}")
write user1:name \\ Ravi
write user1:age \\ 25
write user1:city \\ Hyderabad
Nested Objects
Nested JSON objects map to nested chain fields, accessible with : chaining — the same syntax as nested chains.
Nested JSON
{
"name": "Ravi",
"adr": {
"city": "Hyderabad",
"code": "500001"
}
}
Chain access
data1:name
data1:adr:city
data1:adr:code
jsonText = "{"name":"Ravi","age":25,"adr":{"city":"Hyderabad","code":"500001"}}"
parseJson("data", jsonText)
write data1:name \\ Ravi
write data1:age \\ 25
write data1:adr:city \\ Hyderabad
write data1:adr:code \\ 500001
JSON Arrays
A JSON array of objects becomes a multi-entry chain. Access each element by index.
jsonArr = "[{"name":"Ravi","adr":{"city":"Hyd"}},{"name":"Priya","adr":{"city":"Vizag"}}]"
parseJson("users", jsonArr)
write users1:name \\ Ravi
write users1:adr:city \\ Hyd
write users2:name \\ Priya
write users2:adr:city \\ Vizag
write len(users:n) \\ 2
Loop over JSON array
parseJson("users", jsonArr)
repeat i to len(users:n)
write users[i]:name
write users[i]:adr:city
;
Updating Values
Parsed chain fields can be updated just like any chain — assign directly.
parseJson("data", "{"name":"Ravi","age":25}")
write data1:age \\ 25
data1:age = 30
write data1:age \\ 30
toJson()
toJson(chain:n) converts a chain back into a JSON string. Useful for saving updated data back to a file.
parseJson("data", "{"name":"Ravi","age":25}")
\\ Update a field
data1:age = 30
\\ Convert back to JSON
updatedJson = toJson(data:n)
write updatedJson
\\ {"name":"Ravi","age":30}
ℹ️ toJson() takes the chain name with :n suffix — same as how you reference a chain everywhere else in Astra.
JSON + File I/O
The most common pattern — read JSON from a file, parse it, update it, write it back.
\\ Step 1: Write JSON to file
f = create("config.json")
plus(f, "{"name":"Ravi","age":25,"adr":{"city":"Hyd","code":"500001"}}", "raw")
close(f)
\\ Step 2: Read and parse
f2 = create("config.json")
jsonText = read(f2, "t")
close(f2)
parseJson("data", jsonText)
write data1:name \\ Ravi
write data1:age \\ 25
write data1:adr:city \\ Hyd
\\ Step 3: Update a field
data1:age = 30
\\ Step 4: Save back to file
updatedJson = toJson(data:n)
f3 = create("config.json")
clear(f3)
plus(f3, updatedJson, "raw")
close(f3)
\\ Step 5: Confirm
f4 = create("config.json")
finalCheck = read(f4, "t")
close(f4)
write finalCheck
Common Patterns
Parse inline JSON string
parseJson("user", "{"name":"Alice","score":95}")
write user1:name \\ Alice
write user1:score \\ 95
Parse JSON array and loop
parseJson("students", "[{"name":"Alice","score":90},{"name":"Bob","score":85},{"name":"Charlie","score":95}]")
repeat i to len(students:n)
write students[i]:name + " — " + students[i]:score
;
\\ Alice — 90
\\ Bob — 85
\\ Charlie — 95
Round-trip: parse → update → save
\\ Parse
parseJson("cfg", "{"version":1,"debug":false}")
write cfg1:version \\ 1
\\ Update
cfg1:version = 2
\\ Back to JSON
write toJson(cfg:n) \\ {"version":2,"debug":false}