【问题标题】:Looking for advice on how to normalize format of incoming json from different sources寻找有关如何规范化来自不同来源的传入 json 格式的建议
【发布时间】:2015-03-05 23:53:25
【问题描述】:

我正在从事一个从多个不同来源接收数据 (json) 的项目。每个来源都以不同的格式返回 json,但所有服务都属于同一类别,即来自 Jira 的问题和来自 PivotalTracker 的故事都具有相同的核心信息。

我正在寻找一种方法来尽可能地将其标准化,以便将来可以添加其他服务和格式。现在我正在分别处理每种响应类型(Jira、Pivo​​talTracker)并对每个响应单独采取行动。

到目前为止,我认为每个服务都需要一个解析器,即 JiraIssueParser、Pivo​​talTrackerStoryParser 等,它将响应转换为一种通用格式,一种方法可以使用该格式继续发布,而不是为每个服务提供方法做接收/解析/发布。

类似这样的格式:

{
  issue: {
    title: ,
    description: ,
    assignee: ,
    comments: {
      1: {
        id: ,
        title: ,
        body: 
      }
    time_entries: {
      1: {
        id: ,
        time: ,
        date: 
      }
    }
  }
}

我想在某处定义通用模式,以便每个解析器的输出始终相同。我认为这可以通过 YAML 文件来完成,但我不确定如何去做,以及如何在解析器中使用它。

我将非常感谢有关如何执行此操作的一些建议。也许这是一个非常愚蠢的问题,我应该只从每个解析器输出上述格式,但我认为有某种强制/验证的格式是有意义的。

感谢您的建议,如果有人有任何想法,我愿意为此采取新的方向。提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby json parsing


    【解决方案1】:

    如果您使用的是 Rails,那么我假设您将在某个时候拥有一个关系数据库。

    我的建议是定义 ActiveRecord 模型来表达您的“标准化”格式:问题、评论、TimeEntry 等。

    因此,解析器的工作是将 JSON 数据强制转换为适当的模型对象和属性并保存它们。因此,您的模型强制执行规范的数据结构(即模式),您甚至可以使用验证器进行进一步的完整性检查。

    最后,我还将原始 JSON 保存在模型旁边的某个位置,最好也保存在数据库中。即使您已经解析了 JSON,保留它也可以方便地进行故障排除。例如,如果您发现并修复了解析错误,您可以在保存的 JSON 上重新运行解析器,而无需重新下载原始外部源的所有内容。

    【讨论】:

    • 感谢您的回复和良好的建议。我正在考虑将 MongoDB 用于外部对象(问题、评论等)。你认为这是一个好的举措吗?
    • @Adam 我没有使用 MongoDB 的经验,所以我无法帮助你。我想这取决于您期望规范模式的具体程度。
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2022-01-16
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多