2

我有以下代码将 Json 对象重新格式化为另一个 Json 对象:

 val newJson = Json.toJson(retJson.fields.flatMap {
      case (epoch, obj) => obj.as[JsObject].fields.map(epoch -> _)
    }.groupBy(_._2._1)
    .mapValues(
      _.map {
        case (epoch, (k, v)) => {
          var epochDate = epoch.substring(0, 13).toLong
          epochDate = convertEpoch(epochDate, timezoneOffset)
          Seq[Double](epochDate, sensorCalculations(whatevers, Option(v.as[String])))
        }
      }))

这很好用,但是我们有一个新的要求,当一个值为 -1 时,我们应该忽略这个元素并且不将它包含在结果中。我不确定如何正确执行此操作。

- - 编辑 - -

我尝试了以下导致匹配错误的方法

case (epoch, (k, v)) if v.as[String] != "-1" => {

谢谢。

4

3 回答 3

0

您可以在适当的地方添加 if 子句。例如可以检查值 k:

....
case (epoch, (k, v)) if(!(k==-1))=> {
...
于 2013-02-13T06:34:18.493 回答
0
val newJson = Json.toJson(retJson.fields.flatMap {
  case (epoch, obj) => obj.as[JsObject].fields.map(epoch -> _)
}.groupBy(_._2._1)
  .mapValues(
  _.collect {
    case (epoch, (k, v)) if v != -1 => {
      var epochDate = epoch.substring(0, 13).toLong
      epochDate = convertEpoch(epochDate, timezoneOffset)
      Seq[Double](epochDate, sensorCalculations(whatevers, Option(v.as[String])))
    }
  }))
于 2013-02-13T07:37:33.817 回答
0

以下解决方案对我有用:

   val il = for {
      (epoch, obj) <- retJson.fields
      (k, v) <- obj.as[JsObject].fields
      if v.as[String] != "-1"
    } yield (epoch, (k, v))

    val mapResult = il.groupBy(_._2._1)
      .mapValues(
        _.map {
          case (epoch, (k, v)) => {
            var epochDate = epoch.substring(0, 13).toLong
            epochDate = convertEpoch(epochDate, timezoneOffset)
            Seq[Double](epochDate, sensorCalculations(whatevers, Option(v.as[String])))
          }
        })
于 2013-02-13T23:58:34.463 回答