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

(These docs cover all versions between v3 to v8 and are equivalent to the old BuckleScript docs before the rebrand)

JSON

Parse

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.

Stringify

Use Js.Json.stringify:

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

Advanced

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.