This is the latest docs version
Quick Links
  • -Overview
  • -Language Features
  • -JS Interop
  • -Build System
Documentation
Language Manual
Reference for all language features
ReScript & React
First class bindings for ReactJS
GenType
Seamless TypeScript integration
Reanalyze
Dead Code & Termination analysis
Exploration
Packages
Explore third party libraries and bindings
Syntax Lookup
Discover all syntax constructs
APIPlaygroundBlogCommunity
  • Playground
  • Blog
  • Community
  • X
  • Bluesky
  • GitHub
  • Forum
Js Module
Overview
Js
submodules
  • Array
  • Array2
  • BigInt
  • Blob
  • Console
  • Date
  • Dict
  • Exn
  • File
  • Float
  • Global
  • Int
  • Json
    • t
      t
    • t
      tagged_t
    • v
      classify
    • v
      test
    • v
      decodeString
    • v
      decodeNumber
    • v
      decodeObject
    • v
      decodeArray
    • v
      decodeBoolean
    • v
      decodeNull
    • v
      null
    • v
      string
    • v
      number
    • v
      boolean
    • v
      object_
    • v
      array
    • v
      stringArray
    • v
      numberArray
    • v
      booleanArray
    • v
      objectArray
    • v
      parseExn
    • v
      stringify
    • v
      stringifyWithSpace
    • v
      stringifyAny
    • v
      deserializeUnsafe
    • v
      serializeExn
    • Kind
  • List
  • Map
  • Math
  • Null
  • Null_undefined
  • Nullable
  • Obj
  • Option
  • Promise
  • Promise2
  • Re
  • Result
  • Set
  • String
  • String2
  • TypedArray2
    • DataView
    • Float64Array
    • Float32Array
    • Uint32Array
    • Int32Array
    • Uint16Array
    • Int16Array
    • Uint8ClampedArray
    • Uint8Array
    • Int8Array
    • ArrayBuffer
    Typed_array
    • DataView
    • Float64_array
    • Float64Array
    • Float32_array
    • Float32Array
    • Uint32Array
    • Int32_array
    • Int32Array
    • Uint16Array
    • Int16Array
    • Uint8ClampedArray
    • Uint8Array
    • Int8Array
    • S
    • ArrayBuffer
    • Type
  • Types
  • Undefined
  • Vector
  • WeakMap
  • WeakSet
  • API / Js / Json

    Json

    Efficient JSON encoding using JavaScript API

    see MDN

    t

    RESCRIPT
    type t = | Boolean(bool) | Null | String(string) | Number(float) | Object(Js.Dict.t<t>) | Array(array<t>)

    The JSON data structure

    tagged_t

    RESCRIPT
    type tagged_t = | JSONFalse | JSONTrue | JSONNull | JSONString(string) | JSONNumber(float) | JSONObject(Js_dict.t<t>) | JSONArray(array<t>)

    classify

    RESCRIPT
    let classify: t => tagged_t

    test

    RESCRIPT
    let test: ('a, Kind.t<'b>) => bool

    test(v, kind) returns true if v is of kind.

    decodeString

    RESCRIPT
    let decodeString: t => option<Js_string.t>

    decodeString(json) returns Some(s) if json is a string, None otherwise.

    decodeNumber

    RESCRIPT
    let decodeNumber: t => option<float>

    decodeNumber(json) returns Some(n) if json is a number, None otherwise.

    decodeObject

    RESCRIPT
    let decodeObject: t => option<Js_dict.t<t>>

    decodeObject(json) returns Some(o) if json is an object, None otherwise.

    decodeArray

    RESCRIPT
    let decodeArray: t => option<array<t>>

    decodeArray(json) returns Some(a) if json is an array, None otherwise.

    decodeBoolean

    RESCRIPT
    let decodeBoolean: t => option<bool>

    decodeBoolean(json) returns Some(b) if json is a boolean, None otherwise.

    decodeNull

    RESCRIPT
    let decodeNull: t => option<Js_null.t<'a>>

    decodeNull(json) returns Some(null) if json is a null, None otherwise.

    null

    RESCRIPT
    let null: t

    null is the singleton null JSON value.

    string

    RESCRIPT
    let string: string => t

    string(s) makes a JSON string of the string s.

    number

    RESCRIPT
    let number: float => t

    number(n) makes a JSON number of the float n.

    boolean

    RESCRIPT
    let boolean: bool => t

    boolean(b) makes a JSON boolean of the bool b.

    object_

    RESCRIPT
    let object_: Js_dict.t<t> => t

    object_(dict) makes a JSON object of the Js.Dict.t dict.

    array

    RESCRIPT
    let array: array<t> => t

    array_(a) makes a JSON array of the Js.Json.t array a.

    stringArray

    RESCRIPT
    let stringArray: array<string> => t

    stringArray(a) makes a JSON array of the string array a.

    numberArray

    RESCRIPT
    let numberArray: array<float> => t

    numberArray(a) makes a JSON array of the float array a.

    booleanArray

    RESCRIPT
    let booleanArray: array<bool> => t

    booleanArray(a) makes a JSON array of the bool array a.

    objectArray

    RESCRIPT
    let objectArray: array<Js_dict.t<t>> => t

    objectArray(a) makes a JSON array of the JsDict.tarraya`.

    parseExn

    RESCRIPT
    let parseExn: string => t

    parseExn(s) parses the string s into a JSON data structure. Returns a JSON data structure. Raises SyntaxError if the given string is not a valid JSON. Note: SyntaxError is a JavaScript exception.

    See parse on MDN.

    Examples

    RESCRIPT
    /* parse a simple JSON string */ let json = try Js.Json.parseExn(` "hello" `) catch { | _ => failwith("Error parsing JSON string") } switch Js.Json.classify(json) { | Js.Json.JSONString(value) => Js.log(value) | _ => failwith("Expected a string") }
    RESCRIPT
    /* parse a complex JSON string */ let getIds = s => { let json = try Js.Json.parseExn(s) catch { | _ => failwith("Error parsing JSON string") } switch Js.Json.classify(json) { | Js.Json.JSONObject(value) => /* In this branch, compiler infer value : Js.Json.t Js.Dict.t */ switch Js.Dict.get(value, "ids") { | Some(ids) => switch Js.Json.classify(ids) { | Js.Json.JSONArray(ids) => /* In this branch compiler infer ids : Js.Json.t array */ ids | _ => failwith("Expected an array") } | None => failwith("Expected an `ids` property") } | _ => failwith("Expected an object") } } /* prints `1, 2, 3` */ Js.log(getIds(` { "ids" : [1, 2, 3 ] } `))

    stringify

    RESCRIPT
    let stringify: t => string

    stringify(json) formats the JSON data structure as a string. Returns the string representation of a given JSON data structure.

    See stringify on MDN.

    Examples

    RESCRIPT
    /* Creates and stringifies a simple JS object */ let dict = Js.Dict.empty() Js.Dict.set(dict, "name", Js.Json.string("John Doe")) Js.Dict.set(dict, "age", Js.Json.number(30.0)) Js.Dict.set(dict, "likes", Js.Json.stringArray(["ReScript", "ocaml", "js"])) Js.log(Js.Json.stringify(Js.Json.object_(dict)))

    stringifyWithSpace

    RESCRIPT
    let stringifyWithSpace: (t, int) => string

    stringifyWithSpace(json) formats the JSON data structure as a string. Returns the string representation of a given JSON data structure with spacing.

    See stringify on MDN.

    Examples

    RESCRIPT
    /* Creates and stringifies a simple JS object with spacing */ let dict = Js.Dict.empty() Js.Dict.set(dict, "name", Js.Json.string("John Doe")) Js.Dict.set(dict, "age", Js.Json.number(30.0)) Js.Dict.set(dict, "likes", Js.Json.stringArray(["ReScript", "ocaml", "js"])) Js.log(Js.Json.stringifyWithSpace(Js.Json.object_(dict), 2))

    stringifyAny

    RESCRIPT
    let stringifyAny: 'a => option<string>

    stringifyAny(value) formats any value into a JSON string.

    Examples

    RESCRIPT
    /* prints `["hello", "world"]` */ Js.log(Js.Json.stringifyAny(["hello", "world"]))

    deserializeUnsafe

    RESCRIPT
    let deserializeUnsafe: string => 'a

    Best-effort serialization, it tries to seralize as many objects as possible and deserialize it back

    It is unsafe in two aspects

    • It may throw during parsing

    • when you cast it to a specific type, it may have a type mismatch

    serializeExn

    RESCRIPT
    let serializeExn: 'a => string

    It will raise in such situations:

    • The object can not be serlialized to a JSON

    • There are cycles

    • Some JS engines can not stringify deeply nested json objects

    Types and values
    • t
      t
    • t
      tagged_t
    • v
      classify
    • v
      test
    • v
      decodeString
    • v
      decodeNumber
    • v
      decodeObject
    • v
      decodeArray
    • v
      decodeBoolean
    • v
      decodeNull
    • v
      null
    • v
      string
    • v
      number
    • v
      boolean
    • v
      object_
    • v
      array
    • v
      stringArray
    • v
      numberArray
    • v
      booleanArray
    • v
      objectArray
    • v
      parseExn
    • v
      stringify
    • v
      stringifyWithSpace
    • v
      stringifyAny
    • v
      deserializeUnsafe
    • v
      serializeExn

    © 2025 The ReScript Project

    Software and assets distribution powered by KeyCDN.

    About
    • Community
    • ReScript Association
    Find us on