JSON

Parse

Bind to JavaScript's JSON.parse and type the return value as the type you're expecting:

ReScriptJS Output
// declare the shape of the json you're binding to
type data = {names: array<string>}

// bind to JS' JSON.parse
@scope("JSON") @val
external parseIntoMyData: string => data = "parse"

let result = parseIntoMyData(`{"names": ["Luke", "Christine"]}`)
let name1 = result.names[0]

Where data can be any type you assume the JSON is. As you can see, this compiles to a straightforward JSON.parse call. As with regular JS, this is convenient, but has no guarantee that e.g. the data is correctly shaped, or even syntactically valid. Slightly dangerous.

Stringify

Use JSON.stringify if your data is of type JSON.t or JSON.stringifyAny if it is not.

ReScriptJS Output
Console.log(JSON.stringifyAny(["Amy", "Joe"]))

Import a JSON file

Use the @module attribute to import JSON files directly.

ReScriptJS Output (Module)JS Output (CommonJS)
@module external studentNames: JSON.t = "./students.json"
Console.log(studentNames)

Advanced

Thanks to untagged variants, JSON can be encoded and decoded idiomatically. Check it out on the variants page.