我需要撰寫一個接收 JsValue 的函式,并執行以下步驟:
- 檢查它的型別是否為 Array
- 如果它不是陣列,則回傳串列中的值
- 如果是陣列,請檢查它的陣列是物件還是簡單型別(字串、布林值等)
- 如果它的簡單型別陣列回傳這個陣列并列印“這是一個簡單型別的陣列”
- 如果它的物件陣列回傳這個陣列并列印“這是一個帶有物件的陣列”
所以像這樣:
def myFunc(json: JsValue) = {
if (json.isInstanceOf[JsArray]) {
// check if list of objects or simple type
// how do i check if its a list of objects or simple type??
} else {
JsArray(json)
}
}
謝謝!
uj5u.com熱心網友回復:
我發現模式匹配往往在這些情況下有很大幫助。
所以我們從一個骨架開始。明確說明所需的結果型別有助于指導推理。
def myFunc(json: JsValue): JsArray =
json match {
// Fill in cases later
}
- 如果它不是陣列,則回傳串列中的值
def myFunc(json: JsValue): JsArray =
json match {
case JsArray(members) => ???
case _ => JsArray(Array(json))
}
- 如果它的簡單型別陣列回傳這個陣列并列印“這是一個簡單型別的陣列”
- 如果它的物件陣列回傳這個陣列并列印“這是一個帶有物件的陣列”
圍繞歧義做出一些假設(空陣列?簡單和物件?嵌套陣列?):
def isSimple(json: JsValue) =
json match {
case _: JsArray | _: JsObject => false
case _ => true
}
def myFunc(json: JsValue): JsArray =
json match {
case arr @ JsArray(members) =>
// arr is effectively json.asInstanceOf[JsArray]
if (members.forall(isSimple)) {
// array is empty, or every member is simple
println("this is an array with simple types")
} else {
// array contains at least one array or object
println("this is an array with objects")
}
arr
case _ => JsArray(Array(json))
}
uj5u.com熱心網友回復:
您可以使用該validate方法,請參閱此檔案
https://www.playframework.com/documentation/2.8.x/ScalaJson您將在此處獲得多種方法,使用驗證是其中之一,也是首選。
val input = """{
| "a": "1233"
| }""".stripMargin
val json = Json.parse(input)
json.validate[JsArray].map(println).getOrElse(println(json))
這里 if JSONis ofJsArray將進入map函式,否則 ( getOrElse) 它將簡單地列印它具有的任何 JSON 值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362475.html
