【问题标题】:json4s response to case classjson4s对案例类的响应
【发布时间】:2016-03-04 12:12:24
【问题描述】:

我收到这个 json 响应,如何为 page_views 创建 Scala 案例类??

"page_views": {
    "2015-12-30T21:30:00+05:30": 4,
    "2016-01-08T15:30:00+05:30": 25,
    "2016-01-13T11:30:00+05:30": 9,
    "2016-01-13T12:30:00+05:30": 8,
    "2016-01-14T10:30:00+05:30": 21,
    "2016-01-21T12:30:00+05:30": 19,
    "2016-01-21T17:30:00+05:30": 4,
    "2016-01-22T17:30:00+05:30": 2,
    "2016-02-02T10:30:00+05:30": 14,
    "2016-02-24T12:30:00+05:30": 11,
    "2016-02-26T09:30:00+05:30": 12
  },

【问题讨论】:

    标签: scala class case json4s


    【解决方案1】:

    首先定义你想要的案例类。假设它类似于case class PageView(date:myDateType,numberViews:Long)。那么你就不会陷入你收到的 json 具有明确写入字段datenumberViews 的基本情况,例如{"date":"xxx","numberViews":123}。因此,使用 json4s 创建案例类并让它完成其余工作是不够的,您必须编写一个自定义(反)序列化程序(他们有一个示例 here,在页面上搜索“序列化程序”)。

    【讨论】:

    • 给定的 JSON 对象不是数组。所以所描述的方法不起作用:"page_views": { "2015-12-30T21:30:00+05:30": 4, ...} //object。仅在 "page_views": [ { "2015-12-30T21:30:00+05:30": 4} ,... ] 时有效
    • 您将解析 json 对象并通过循环其“键”将其反序列化为 List[PageView](不确定这是正确的词,但在这种情况下它是表示日期的字符串),例如mapField.
    【解决方案2】:

    经过多次尝试,我能够让它工作。我使用Map 绑定到 JSON 字段。

    case class Test(page_views: Map[String, Int])
    

    【讨论】:

      【解决方案3】:

      您可以跟进this tutorial,了解如何将 json 字符串解析为您的模型。它还涵盖了从 json 转换为案例类时可能需要应用的一些常见转换

      但你的情况有点奇怪,page_views 不应该包含/是一个数组吗? page_views json对象不知道里面有哪些字段,怎么处理呢?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多