[英]get all keys of play.api.libs.json.JsValue
I have to store play.api.libs.json.JsValue
keys to a List. 我必须将play.api.libs.json.JsValue
键存储到List。 How i do this? 我怎么做的?
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]()
expecting 期待
newIndexes=List(3,5,4,2)
If you want to get all keys in the json you can do it recursively with 如果你想获得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()
}
Note that the order is not preserved as values
in JsObject
is a Map
. 请注意,由于JsObject
中的values
是Map
, JsObject
不会保留顺序。
Another option is to use the Seq
of fields in JsObject
instead of using the keys
: 另一种选择是使用JsObject
的Seq
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]
}
This way you will get a breadth-first order of all keys in json object. 这样,您将获得json对象中所有键的广度优先顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.