json - 在 Elm 应用程序中使用静态数据 : parse JSON or use Elm values?

标签 json jsonschema elm static-data

我即将开始开发 Elm 应用程序,该应用程序主要用于显示数据集。数据将准备在由 JSON 模式指定的多个 JSON 文件中(包括不同语言的文本)。该数据库不会消失,因为存在共享数据集的其他用例。

我现在看到有两种从 Elm 访问这些数据的选项。

在运行时检索和解析 JSON

使用json-schema-to-elm或类似的,我可以从我拥有的模式生成数据类型和解析器。然后,在运行时,我加载应用程序所需的 JSON 并解析它。

优点

  • 始终使用当前数据,无需额外工作。
  • 应用大小不会因为数据而变得臃肿。

缺点

  • JSON 检索的运行时影响。
  • JSON 解析对运行时的影响。
  • 数据必须存储在模型中。

在编译时将 JSON 转换为 Elm 值

通过手写的编译器(可能基于 json-schema-to-elm 生成的类型),我可以将 JSON 数据静态转换为 Elm 代码。因此,数据随应用程序一起提供,并且可以使用 Elm 原语进行访问。

优点

  • 直接访问数据,不会影响运行时。
  • 数据不存储在模型中。

缺点

  • 当数据发生变化时,应用程序需要重新编译。
  • 应用程序非常庞大,因为需要包含所有数据。

权衡

根据上面的列表,这是我的结论。

  • 我预计数据很少会发生变化(在开始的管理期之后)。重新编译和部署应用程序应该很简单;不会有任何需要注意的外部互动。
  • 该应用应该在移动设置中使用,因此节省网络请求和处理器负载是一件好事。
  • 我想要一个可供离线使用的独立版本,因此拥有一个整体可能会有所帮助。
  • 实际数据集不会太大;我估计最多几百千字节,甚至包括所有语言。

因此,我认为在我的情况下使用预编译的 Elm 值是更好的解决方案。

我的问题是:我是否错过了这两种方法中会影响我的权衡的任何方面?我还应该考虑其他方法吗?

请注意,我现在并不担心具体的工具;这更多的是一个概念、设计问题。

最佳答案

为了巩固上述评论中的对话:

您提到的两个包 json-schema-to-elmjson-to-elm 的输出大致相似。它们都渲染包含类型、解码器和编码器的 Elm 源代码。

主要区别在于它们的输入:

  • json-schema-to-elm 需要 JSON Schema作为输入。当您的 JSON 变得比示例描述的更加复杂时,这非常有用,但它还要求您为要建模的所有 JSON 编写架构文件。
  • json-to-elm 将示例 JSON 值作为输入。当您的 JSON 模型相对简单时,这非常有用。

就我个人而言,我会尝试编写一些概念证明,看看是否确实存在任何有害的运行时低效率。您始终可以将 json 值保留为 .elm 文件中的字符串 - 这将简化离线访问,避免网络流量,实际上唯一的缺点是每个 json 输入的每个值解码一次,因为如果它不改变,您无需再次解码。

注意:如果您选择将 json 作为字符串值嵌入到 .elm 文件中,请注意 multi-line string syntax这将有助于避免原始 json 字符串中出现大量转义字符

关于json - 在 Elm 应用程序中使用静态数据 : parse JSON or use Elm values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46236304/

相关文章:

javascript - 将对象与 json 中的对象进行比较,如果相同则返回

python - 如何使用枚举包含 Jsonschema 多类型参数?

jsonschema - 是否有更多在模式的多个级别使用 readOnly 的示例来阐明语义?

elm - 了解 Elm 中的通用联合类型

constructor - 如何检查变量是否已使用构造函数构造?

elm - 调用 update 后未调用命令

javascript - 使用来自 Flickr 的 JSON 输出来显示来自搜索的图像

json - IBM WATSON - 上传 json 文件以创建有意义的意图

json - Wordpress API JSON 返回限制

json - 编写 JSON 模式以检测具有重复名称的对象