gpt4 book ai didi

json - Play Framework : How to sort JSON alphabetically

转载 作者:行者123 更新时间:2023-12-01 09:54:57 25 4
gpt4 key购买 nike

鉴于以下 JSON...

{
"z": 100,
"b": 50,
"q": 12
}

如何按字母顺序对键进行排序?

最佳答案

很简单,但(显然)我们需要确保我们有一个 JsObject .

val js = Json.parse("""{
"z": 100,
"b": 50,
"q": 12
}""")

val jsObject = js.as[JsObject] // Not actually safe, but bear with me

这些字段仅存储在名为 fields 的字段中。作为 Seq[(String, JsValue)] .
scala> jsObject.fields
res5: Seq[(String, play.api.libs.json.JsValue)] = ListBuffer((z,100), (b,50), (q,12))

我们可以做一个新的 JsObject具有相同的字段,除了排序。
scala> JsObject(jsObject.fields.sortBy(_._1))
res6: play.api.libs.json.JsObject = {"b":50,"q":12,"z":100}

早些时候,我提到使用 as[JsObject]是不安全的,因为如果我们的 JsValue实际上是一个数组或字符串,它会抛出异常。处理 JsValue 的更安全方法这里是模式匹配 JsObject并对其进行排序,不对任何其他类型执行任何操作。创建一个递归排序所有键的方法很简单:
def sortJs(js: JsValue): JsValue = js match {
case JsObject(fields) => JsObject(fields.sortBy(_._1).map { case (k, v) => (k, sortJs(v)) })
case _ => js
}

val js = Json.parse("""{
"z": 100,
"b": {"k": 1, "j": 3, "i": 98},
"q": 12
}""")

scala> sortJs(js)
res8: play.api.libs.json.JsValue = {"b":{"i":98,"j":3,"k":1},"q":12,"z":100}

关于json - Play Framework : How to sort JSON alphabetically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30177961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com