解码对象的JSON数组

Rot*_*eti 0 json reason bucklescript

假设我有这个对象的JSON数组:

[
  {"name": "foo", "tags": ["bird", "animal"], "age": 10},
  {"name": "bar", "tags": ["dog", "animal"], "age": 5},
  {"name": "baz", "tags": ["cat", "animal"], "age": 3}
]
Run Code Online (Sandbox Code Playgroud)

如何在ReasonML中对此进行解码?

gle*_*nsl 5

使用bs-json将其解码为记录数组:

let data = {|[
  {"name": "foo", "tags": ["bird", "animal"], "age": 10},
  {"name": "bar", "tags": ["dog", "animal"], "age": 5},
  {"name": "baz", "tags": ["cat", "animal"], "age": 3}
]|};

type t = {
  name: string,
  tags: array(string),
  age: int
};

module Decode = {
  let item = json =>
    Json.Decode.{
      name: json |> field("name", string),
      tags: json |> field("tags", array(string)),
      age:  json |> field("age", int)
    };

  let all =
    Json.Decode.array(item)
};

let result: array(t) =
  data |> Json.parseOrRaise
       |> Decode.all;
Run Code Online (Sandbox Code Playgroud)