반응형
재생 프레임워크 JsObject에서 Json 배열 구문 분석
다음 Json이 있습니다.
{
"web-category" : "macaroons",
"sub-categories" : [
{ "name" : "pink" },
{ "name" : "blue" },
{ "name" : "green" }
]
}
Play에서 JsObject로 취득했습니다.이제 다음 작업을 성공적으로 수행할 수 있습니다.
//(o is the JsObject)
val webCat:Option[String] = (o \ "web-category").asOpt[String]
println(webCat.toString)
>> Some(macaroons)
지금까지는 좋아.그러나 어레이 Json 개체에 액세스하는 방법은 무엇입니까?나 이거 있는데...
val subCats:Option[JsArray] = (o \ "sub-categories").asOpt[JsArray]
println(subCats.toString)
>> Some([{"name" : "blue"},{"name" : "green"},{"name" : "pink"}])
JsArray를 사용하여 다음과 같은 모든 이름 목록을 가져오면 됩니다.
List("blue", "green", "pink")
따라서 JsArray에 액세스하는 방법을 알 수 없습니다.
도와주셔서 감사합니다.
가능한 한 빨리 JSON-land에서 Scala-representation-land로 이동하는 것이 좋다고 생각합니다.한다면obj
당신의 것입니다JsObject
예를 들어 다음과 같이 쓸 수 있습니다.
val subCategories = (obj \ "sub-categories").as[List[Map[String, String]]]
val names = subCategories.map(_("name"))
또는 다음과 같은 경우도 있습니다.
case class Category(name: String, subs: List[String])
import play.api.libs.functional.syntax._
implicit val categoryReader = (
(__ \ "web-category").read[String] and
(__ \ "sub-categories").read[List[Map[String, String]]].map(_.map(_("name")))
)(Category)
그 후:
obj.as[Category]
이 후자의 접근방식은 오류 처리를 더욱 깔끔하게 합니다(예: 교체만 하면 됩니다).as
와 함께asOpt
이 최상위 레벨에서) 및 다른 것과 잘 어울린다.Reads
type class instance: 가 있는 경우JsArray
예를 들어, 이 오브젝트들 중에서array.as[List[Category]]
원하는 것을 얻을 수 있습니다.
피터가 말한 것, 또는:
(o \ "sub-categories" \\ "name").map(_.as[String]).toList
다음과 같은 경우:
subCats.map( jsarray => jsarray.value.map(jsvalue => (jsvalue \ "name").as[String]).toList)
이 경우 일반적으로는Option[List[String]]
언급URL : https://stackoverflow.com/questions/22045385/parsing-a-json-array-in-play-framework-jsobject
반응형
'source' 카테고리의 다른 글
구조물에 여러 개의 이름 태그를 정의하는 방법 (0) | 2023.04.02 |
---|---|
스프링 보안 LDAP 및 리멤버 미 (0) | 2023.04.02 |
제품 ID에 대한 PHP 변수와 함께 wc_get_product() 사용 (0) | 2023.04.02 |
현재 사용자가 wordpress에서 관리자인지 확인합니다. (0) | 2023.04.02 |
Wordpress에서 XSLT를 사용한 XML 구문 분석 (0) | 2023.04.02 |