0

被这个难住了。使用 PlayJSON 和他们的 JsObject。

Wart remover 正在用胡萝卜(^)标记map调用,并在该行说 Inferred type contains Serializable。代码可以正常工作,但想知道更多关于为什么工具会标记此错误以及如何删除此错误。

    def getPrintVersionOfJsonObj(jsObj: JsObject): JsObject = {
     val fieldValueMap: Seq[(String,JsValue)] = jsObj.fields.map {
      case (fieldName, fieldValue: JsNumber)  => (fieldName, fieldValue)
      case (fieldName, fieldValue: JsBoolean) => (fieldName, fieldValue)
      case (fieldName, fieldValue: JsString)  => (fieldName, fieldValue)
      case (fieldName, fieldValue: JsArray)   => (fieldName, convertJsArrayToPrettyString(fieldValue))
      case (fieldName, fieldValue: JsObject)  => (fieldName, getPrintVersionOfJsonObj(fieldValue))
      case (fieldName, fieldValue: JsValue)   => (fieldName, JsString(Json.prettyPrint(fieldValue)))
  }

  JsObject(fieldValueMap)
}

JSObject.fields 是scala.collection.Seq[scala.Tuple2[scala.Predef.String, play.api.libs.json.JsValue]]

我发现令人困惑的是您知道该 valfieldValueMap的返回类型并且您知道jsObj.fields

4

1 回答 1

0

Are you sure it even compiles (I don't see how if it does)?

The first (for example) case of your match, returns (String, JsNumber), while the fourth one returns (what seems to be) (String, String). The only common super type of these two types is Serializable, so, that's what it ends up being.

于 2016-03-29T19:55:17.137 回答