You are currently looking at the v8.0.0 docs (Reason v3.6 syntax edition). You can find the latest manual page here.



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

Reason (Old Syntax)ML (Older Syntax)JS Output
// declare the shape of the json you're binding to
type data = {names: array(string)};

// bind to JS' JSON.parse
[@bs.scope "JSON"] [@bs.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.


Use Js.Json.stringify:

Reason (Old Syntax)ML (Older Syntax)JS Output
Js.log(Js.Json.stringifyAny([|"Amy", "Joe"|]));


The Js.Json module provides slightly safer, low-level building blocks for power users who want to parse JSON on a per-field basis. See the examples in the API docs.