Если это вообще возможно, вам следует перейти на Lift JSON 2.3-M1 (http://www.scala -tools.org / repo-release / net / liftweb / lift-json_2.8.1 / 2.3-M1 /). Он содержит два важных улучшения, другое влияет на выражения пути.
В 2.3 выражения пути никогда не возвращают JFields, вместо этого значения JFields возвращаются напрямую. После этого ваш пример будет выглядеть так:
val list = (json \ "kids").children
for ( kid <- list ) myOperation(kid.asInstanceOf[JObject])
Лифт JSON предоставляет несколько стилей для разбора значений из JSON: выражения пути, постижения запросов и случай класса экстракции. Можно смешивать и сочетать эти стили и получать лучшие результаты, которые мы часто делаем. Ради полноты я дам вам некоторые варианты приведенного выше примера, чтобы получить лучшую интуицию этих различных стилей.
// Collect all JObjects from 'kids' array and iterate
val JArray(kids) = json \ "kids"
kids collect { case kid: JObject => kid } foreach myOperation
// Yield the JObjects from 'kids' array and iterate over yielded list
(for (kid@JObject(_) <- json \ "kids") yield kid) foreach myOperation
// Extract the values of 'kids' array as JObjects
implicit val formats = DefaultFormats
(json \ "kids").extract[List[JObject]] foreach myOperation
// Extract the values of 'kids' array as case classes
case class Kid(name: String, age: Int)
(json \ "kids").extract[List[Kid]] foreach println
// Query the JSON with a query comprehension
val ks = for {
JArray(kids) <- json
kid@JObject(_) <- kids
} yield kid
ks foreach myOperation