在Elm应用程序中使用静态数据:解析JSON还是使用Elm值?

在Elm应用程序中使用静态数据:解析JSON还是使用Elm值?,json,jsonschema,elm,static-data,Json,Jsonschema,Elm,Static Data,我即将开始开发一个Elm应用程序,它主要是关于显示数据集的。数据将准备在几个JSON文件中(包括文本的不同语言),由JSON模式指定。这个数据库不会消失,因为共享数据集还存在其他用例 我现在看到两个从Elm访问这些数据的选项 在运行时检索和解析JSON 使用或类似的方法,我可以从现有的模式生成数据类型和解析器。然后,在运行时,我加载应用程序需要的JSON并解析它 优势 始终使用当前数据,无需额外工作 应用程序大小不会因数据而膨胀 缺点 JSON检索的运行时影响 JSON解析的运行时影响 数

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

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

在运行时检索和解析JSON 使用或类似的方法,我可以从现有的模式生成数据类型和解析器。然后,在运行时,我加载应用程序需要的JSON并解析它

优势

  • 始终使用当前数据,无需额外工作
  • 应用程序大小不会因数据而膨胀
缺点

  • JSON检索的运行时影响
  • JSON解析的运行时影响
  • 数据必须存储在模型中
在编译时将JSON转换为Elm值 使用手工编写的编译器(可能基于json模式生成的elm类型),我可以将json数据静态转换为elm代码。因此,数据随应用程序一起提供,可以使用Elm原语访问

优势

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

  • 数据更改时需要重新编译应用程序
  • 应用程序是巨大的,因为所有数据都需要包括在内
权衡 根据上面的列表,这里是我的结论

  • 我希望数据很少发生变化(在一开始的策展期之后)。重新编译和部署应用程序应该很简单;不会有需要注意的外部互动
  • 该应用程序应该用于移动设置,因此保存网络请求和处理器负载是一件好事
  • 我希望有一个离线使用的独立版本,所以拥有一个monolith可能会很有帮助
  • 实际数据集不会太大;我估计最多几百KB,甚至包括所有语言
因此,在我的例子中,我认为使用预编译的Elm值是更好的解决方案

我的问题是:我是否错过了任何一种方法中会影响我权衡的方面?还有其他的方法我应该考虑吗?< 请注意,我现在并不担心特定的工具;这更多的是一个概念性的设计问题。

要巩固上述评论中的对话:

您提到的两个包,
json模式到elm
json到elm
的输出大致相似。它们都呈现包含类型、解码器和编码器的Elm源代码

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

  • elm的json模式作为输入。当JSON变得比一个示例描述的更复杂时,这很有用,但它还需要为所有要建模的JSON编写一个模式文件
  • json-to-elm
    将示例json值作为输入。当JSON模型相对简单时,这非常有用
就我个人而言,我会尝试写一些概念证明,看看是否真的存在任何有害的运行时低效。您可以始终将json值作为字符串保存在.elm文件中-这将简化脱机访问,避免网络流量,而且唯一的缺点是对每个json输入进行一次每值解码,因为如果它不改变,您就不需要再次解码

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

  • 使用elm的json模式生成类型和解码器
  • 在Elm应用程序中,加载JSON数据
  • 使用
    toString
    并将结果写入文件
  • 修复结果中的任何问题,使其成为实际的源文件
  • 根据
    toString的结果

    应该和它的价值一样

    这种方法的有效性取决于:

    • 如何集成工作流:
      json模式到elm
      是一个灵丹妙药应用程序,而elm实际上不可编写脚本
    • json模式对elm
      的支持程度如何
    在我的例子中,
    json schema to elm
    不接受该模式(没有多少有用的错误消息),而且它似乎根本不支持
    patternProperties
    (可能还支持json模式的其他功能)