如何迭代JsObject并为每个对象插入新字段? (玩框架)

时间:2017-04-26 13:13:38

标签: java json scala playframework playframework-2.0

我有一个简单的json:

{
  "boys": [
    {
      "name": "john",
      "lname": "cross"
    },
    {
      "name": "jack",
      "lname": "silver"
    }
  ],
  "girls": [
    {
      "name": "mary",
      "lname": "kers"
    },
    {
      "name": "jane",
      "lname": "daw"
    }
  ]
}

我希望从json中获取boys对象列表,并为每个我想调用方法的名称添加一个新字段,并将该方法返回的值添加到boys对象... < / p>

所以我开始使用类似的东西:

// parsing the json above
val json: JsValue = Json.parse(...)

// get the boys
val boys = (json \ "boys").get

// create new boys
val newBoys = ???

// update the json
val updatedJson = json.as[JsObject] + ("boys" -> newBoys)

但我不确定如何实施newBoys ...

假设我有一个方法:

def getParentName:(boyName: String) = db.getParent(boyName)

所以现在我该怎么做:

- &GT;迭代男孩

- &GT;使用男孩名称

致电getParentName

- &GT;向返回值的男孩插入一个新字段

谢谢!

1 个答案:

答案 0 :(得分:0)

如果你只想要新男孩,

// create new boys
val newBoys = Json.arr(
  Json.obj("name" -> "boy1", "lname" -> "lboy1"),
  Json.obj("name" -> "boy2", "lname" -> "lboy2")
)

val updatedJson = json.as[JsObject] + "boys" -> newBoys

或者,如果你想追加现有男孩,

// create new boys
val newBoys = boys ++ Json.arr(
  Json.obj("name" -> "boy1", "lname" -> "lboy1"),
  Json.obj("name" -> "boy2", "lname" -> "lboy2")
)

val updatedJson = json.as[JsObject] + "boys" -> newBoys