Использование bs-json для декодирования объекта с динамическими ключами в корне
Я пытаюсь декодировать следующий объект JSON в объект Reason.
{"AAPL":{"price":217.36}}
Ключ в корне объекта является динамическим.
Следующий общий пример работает, когда ключ не находится в корне. Как бы я изменил его, чтобы он работал для динамического ключа в корне?
module Decode = {
let obj = json =>
Json.Decode.{
static: json |> field("static",string),
dynamics: json |> field("dynamics", dict(int)),
};
};
1 ответ
Решение
Если ваши данные выглядят так:
let data = {| {
"AAPL": { "price": 217.36 },
"ABCD": { "price": 240.5 }
} |};
Вы можете получить Js.Dict
со следующим:
module Decode = {
open Json.Decode;
let price = field("price", float);
let obj = dict(price);
};
let decodedData = data |> Json.parseOrRaise |> Decode.obj;
let _ = decodedData->(Js.Dict.unsafeGet("AAPL")) |> Js.log;
Это должно напечатать 217.36