gpt4 book ai didi

json - Play 2.1-RC2 : Read keys from JSON

转载 作者:行者123 更新时间:2023-12-02 05:18:00 24 4
gpt4 key购买 nike

我尝试将我的 Web 应用程序从 Play 2.0.4 迁移到 Play 2.1-RC2。

我有一个 JSON 数据,其中包含一个未知键列表(key1key2),如下所示:

{description: "Blah",
tags: [
key1: ["value1", "value2"],
key2: ["value3"]
]
}

我想将来自 JSON 的数据存储在元标记列表中。在 Play 2.0.4 中,我使用了类似这样的东西来读取 tags-list:

def readMetatags(meta: JsObject): List[Metatag] =
meta.keys.toList.map(x => Metatag(x, (meta \ x).as[List[String]])

现在我想使用新的 Play 2.1-JSON-API(原型(prototype)):

import play.api.libs.json._
import play.api.libs.functional.syntax._

object Metatags {
implicit val metatagsRead: Read[Metatags] = (
(JsPath \ "description").read[String] and
(JsPath \ "tags").read[List[Metatag]]
)(Metatags.apply _, unlift(Metatags.unapply _))

implicit val metatagRead: Read[Metatag] = (
JsPath().key. ?? read[String] and // ?!? read key
JsPath().values. ?? read[List[String]] // ?!? read value list
)(Metatag.apply _, unlift(Metatag.unapply _))

}

case class Metatags(description: String, tags: List[Metatag])
case class Metatag(key: String, data: List[String])

如何从 JSON 中读取 key ?

最佳答案

这是一个针对 MetaTag 类的自定义阅读器的解决方案。读取只是将 JsValue 转换为 JsObject,它具有有用的 fieldSet 方法。

对于 MetaTags,宏启动非常有效

object Application extends Controller {

case class MetaTags(description: String, tags: List[MetaTag])
case class MetaTag(key: String, data: List[String])

implicit val readMetaTag = Reads(js =>
JsSuccess(js.as[JsObject].fieldSet.map(tag =>
MetaTag(tag._1, tag._2.as[List[String]])).toList))

implicit val readMetaTags = Json.reads[MetaTags]

def index = Action {
val json = Json.obj(
"description" -> "Hello world",
"tags" -> Map(
"key1" -> Seq("key1a", "key1b"),
"key2" -> Seq("key2a"),
"key3" -> Seq("Key3a", "key3b", "key3c")))

val meta = json.as[MetaTags]
Ok(meta.tags.map(_.data.mkString(",")).mkString("/"))
// key1a,key1b/key2a/Key3a,key3b,key3c
}

}

关于json - Play 2.1-RC2 : Read keys from JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318314/

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