Как я могу разобрать этот JSON на тип записи?

У меня есть некоторые данные, которые я буду получать во время выполнения:

/* {id: 1, name: 'brad', age: 27, address: { city: 'city1', state: 'state1' } } */
let data = "{\"id\":1,\"name\":\"brad\",\"age\":27,\"address\":{\"city\":\"city1\",\"state\":\"state1\"}}";

Используя ReasonML и BuckleScript, как я могу получить эти данные в форме:

type address = {
  city: string,
  state: string
};

type person = {
  id: int,
  name: string,
  age: option int,
  address: option address
};

Решение, которое я придумал, состоит из сотен строк.


person Bradford    schedule 30.04.2017    source источник


Ответы (1)


Используя bs-json:

let parseAddress json =>
  Json.Decode.{
    city: json |> field "city" string,
    state: json |> field "state" string
  };

let parsePerson json =>
  Json.Decode.{
    id: json |> field "id" int,
    name: json |> field "name" string,
    age: json |> optional (field "age" int),
    address: json |> optional (field "address" parseAddress)
  };
person glennsl    schedule 30.04.2017