Early preview: syntax, standard library APIs, and tooling may change.

Working ProgramsJSON, CSV, and Codec Values

JSON, CSV, and Codec Values

Use format modules to parse data, inspect it, validate it, and encode output.

Parse

json.parse_json and csv.parse_csv turn text into structured values.

parsed: Result[JsonValue, String] = parse_json(text)

Inspect

JSON accessors return Option so missing fields stay explicit.

name: Option[String] = value
	.get_field("name")
	.and_then(func(v): v.as_string())

Validate

codec-style decoders model validation as Result.

name ?= value.get_field("name").to_result("missing name")

Encode

CSV rows can be formatted back into text.

csv_text: String = format_csv([["name"], ["Ada"]])

Example

users-csv.brp
import:
	csv: format_csv
	json: JsonValue(JsonVector), as_string, get_field, parse_json


pure func user_name(value: JsonValue) -> Option[String]:
	field ?= value.get_field("name")
	field.as_string()


func main(args: List[String]) -> Void:
	match parse_json("[{\"name\":\"Ada\"}]"):
		Ok(JsonVector(users)):
			match users.get(0):
				Some(user):
					rows: List[List[String]] = [["name"], [user_name(user).get_or("")]]
					print(format_csv(rows)) -- prints: name\nAda
				None:
					print("name")
		Ok(_): print("expected array")
		Err(msg): print(msg)

Try it

terminal
blorp run users-csv.brp