簡體   English   中英

獲取play.api.libs.json.JsValue的所有鍵

[英]get all keys of play.api.libs.json.JsValue

我必須將play.api.libs.json.JsValue鍵存儲到List。 我怎么做的?

var str = ???                        //json String
val json: JsValue = Json.parse(str)
val data=json.\("data")
println(data)                       //[{"3":"4"},{"5":"2"},{"4":"5"},{"2":"3"}]
val newIndexes=List[Long]()

期待

newIndexes=List(3,5,4,2)

如果你想獲得json中的所有鍵,你可以遞歸地執行它

def allKeys(json: JsValue): collection.Set[String] = json match {
  case o: JsObject => o.keys ++ o.values.flatMap(allKeys)
  case JsArray(as) => as.flatMap(allKeys).toSet
  case _ => Set()
}

請注意,由於JsObject中的valuesMapJsObject不會保留順序。

另一種選擇是使用JsObjectSeq of JsObject而不是使用keys

def allKeys(json: JsValue): Seq[String] = json match {
  case JsObject(fields) => fields.map(_._1) ++ fields.map(_._2).flatMap(allKeys)
  case JsArray(as) => as.flatMap(allKeys)
  case _ => Seq.empty[String]
}

這樣,您將獲得json對象中所有鍵的廣度優先順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM