首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Play-Json海岸到海岸:“嵌套”转换的最佳模式

Play-Json海岸到海岸:“嵌套”转换的最佳模式
EN

Stack Overflow用户
提问于 2014-12-11 07:21:21
回答 1查看 381关注 0票数 2

我正在成为play-json从东海岸到西海岸模式的粉丝,尤其是它对组合子的使用。我在一起处理一些复杂的案子。我知道有一种更好的方法,但我对构建功能的combinator方法还不熟悉。

我想把这个转变成:

代码语言:javascript
复制
{
 "somearray": [
   { 
     "field1": "value1",
     "field2": "value1",
     "key": "key1"
   },
   { 
     "field1": "second1",
     "field2": "second1",
     "key": "key2"
   }
  ]
 }

如下所示:

代码语言:javascript
复制
{
 "someObj": {
   "key1":
   { 
     "field1": "value1",
     "field2": "value1"
   },
   "key2":
   { 
     "field1": "second1",
     "field2": "second1"
   }
  ]
 }

我可以让它工作,但我退出了转换:

代码语言:javascript
复制
 (__ \ "someObj").json.copyFrom(__ \ "someArray".json.pick.map {
   case JsArray(arr) => {
     JsObject(arr.map(a =>
       a.transform(<A transform function to prune key>).map(pruned => {
         ((a \ "key").as[String], pruned)
       }).flatMap({
         case JsSuccess(result, _) => Seq(result)
         case other => Nil
       })
   }
   case other => JsNull
 })

这段代码有一些问题:我知道它很冗长,我知道我假设“THere”是一个字符串类型,我需要flatMap把我从JsResult中解脱出来,进入一些我可以用来构建JsValue JsObject。

看起来我应该能够

1)创建子转换,即a.transform()可以嵌套在父转换中,而无需解压缩和重新打包json对象。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-12-11 22:11:13

这样如何(忽略这段代码仍然存在您已经提到的相同问题)?

代码语言:javascript
复制
 def elementTransform = for {
    keyValue <- (__ \ 'key).json.pick  // picks value for key field
    obj <- (__ \ 'key).json.prune // returns object without the key field
    res <- (__ \ keyValue.as[String]).json.put(obj) // uses the keyValue as a field name
  } yield res

  val transform = (__ \ "someObj").json.copyFrom((__ \ "someArray").json.pick[JsArray].map(
    _.value.foldLeft[JsResult[JsObject]](JsSuccess(Json.obj()))(
      (obj, a) =>
        for {
          o <- obj
          field <- a.transform(elementTransform)
        } yield o ++ field
    ).fold(_ => JsNull, identity)
  ))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27412695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档