【问题标题】:iterating over a json with json4s使用 json4s 遍历 json
【发布时间】:2016-08-03 19:46:55
【问题描述】:

我有 json,其结构如下:

{
"searchResults": {
    "searchCriteria": {
        "location": {
            "originalLocation": null
        },
        "startAndEndDate": {
            "start": "2016-10-06T00:00:00",
            "end": "2016-10-09T00:00:00"
        },

        "solution": [{
                "resultID": "O1MDc1MD",
                "selected": false,
                "charges": {
                    "localCurrencyCode": "USD",
                    "averagePricePerNight": 153
                },
                "starRating": 3.5
            },

            {
                "resultID": "0MDc1MD",
                "selected": false,
                "charges": {
                    "localCurrencyCode": "USD",
                    "averagePricePerNight": 153
                },
                "starRating": 3.5
            }
        ]

    }
}
}

我有一个类似的案例类:

case class ResponseModel(
//localCurrencyCode: Option[String],
averagePricePerNight: Option[Int],
starRating: Option[Int])

我想提取averagePricePerNight 和starRating 的值并将其返回到一个列表中。

我无法获得同时包含 starRating 和 averagePricePerNight 的列表,因为在解决方案数组中我还有一个收费数组,所以我没有得到列表。

我用过:

val messagesIds = (json \\ "solution") \ "starRating"

println(messagesIds.values) 

Output: List(3.5, 3.5, 3.0)

预期输出:

List(ResponseModel(5.0,900), ResponseModel(4.5,100), ResponseModel(4.5,1000))

它给了我一个单独的 StarRatings 列表。我如何将两者结合起来,让我知道另一个库是否可以轻松做到这一点。

【问题讨论】:

    标签: scala json4s


    【解决方案1】:

    我会选择类似的东西

    case class Charges(localCurrencyCode: String, averagePricePerNight: Int)
    case class Solution(resultID: String, selected: Boolean, charges: Charges, starRating: Double)
    
    val parsed = (parse(json) \\ "solution").extract[List[Solution]]
    
    val result = parsed.map(x => ResponseModel(Some(x.charges.averagePricePerNight), Some(x.starRating)))
    

    注 1:starRating 似乎是 Double 而不是 Int

    注意 2:您的 ResponseModel 使用 Options... 但您的预期似乎没有。

    【讨论】:

    • 如果没有代码失败的选项,我将尝试一下。
    • 在第 3 行出现类型不匹配错误:类型不匹配:org.JsonAst.json4s 上的 org.json4s.Jvalue(扩展为)需要 org.json4s.JsonInput
    • 你的第 3 行是什么?你有哪些进口商品?
    猜你喜欢
    • 2016-02-10
    • 2015-10-14
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多