【问题标题】:How to encode a list of records to JSON in Reason?如何在 Reason 中将记录列表编码为 JSON?
【发布时间】:2017-09-20 08:13:22
【问题描述】:

给定一个记录类型和一个记录列表:

type note = {
  text: string,
  id: string
};

let notes: list complete_note = [{text: "lol", id: "1"}, {text: "lol2", id: "2"}]

如何使用 bs-json 模块将其编码为 JSON?

我尝试了什么:我尝试在 bucklescript 中使用字符串插值手动创建 JSON 字符串,但这绝对不是我想做的事情 :)

notes
|> Array.of_list
|> Array.map (
  fun x => {
    // What should I do?
  }
)
|> Json.Encode.stringArray
|> Js.Json.stringify;

【问题讨论】:

  • 我不明白为linepoint 定义另一种类型与我的问题有何关系。我不想使用 yojson,它是一个用 Ocaml 编写的 JSON 引擎,我想使用 bs-json 在浏览器中利用原生 JSON 处理。
  • 这并不能回答我的任何问题。我说我使用的是bs-json,但没有编码记录的例子。
  • 谢谢,但没有编码记录的例子。
  • 您必须将该记录转换为Js.Dict,然后使用object_ 进行编码:github.com/BuckleTypes/bs-json/blob/…

标签: json ocaml reason bucklescript


【解决方案1】:

免责声明,我不是 Reason 专家,所以代码可能不是惯用的。它也可能有错误,因为我没有安装 BuckleScript,所以我没有测试它。

因此,如果您想将每个笔记表示为带有textid 字段的JSON 对象,那么您可以使用Js.Json.objectArray 函数从JS 字典数组创建一个JSON 文档。创建字典的最简单方法是使用 Js.Dict.fromList 函数,该函数采用一对列表。

notes
|> Array.of_list
|> Array.map (fun {id, text} => {
  Js.Dict.fromList [("text", Js.Json.string text), ("id", Js.Json.string id)]
})
|> Js.Json.objectArray
|> Js.Json.stringify;

【讨论】:

  • 您的回答中缺少一个小细节:strings 不起作用,必须将它们强制转换为 Js.Json.string
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多