3

この質問を例を挙げて説明しましょう。次のような JSON があるとします。

{"person1":{"name": "Name One", "address": {"street": "Some Street","city": "Some City"}},
"person2":{"name": " Name Two", "address": {"street": "Some Other Street","city": "Some Other City"}}}

【人数制限なし、入力JSONはそれ以上の人数でも可】

この JSON を Persons オブジェクトに抽出するには、次のようにします。

var person = parse(res).extract[T]

関連するケース クラスは次のとおりです。

case class Address(street: String, city: String)
case class Person(name: String, address: Address, children: List[Child])
case class Persons(person1: Person, person2: Person)

質問:上記のシナリオは問題なく動作します。ただし、キーと値のペアでキーが動的である必要があります。したがって、提供されている JSON の例では、person1person2は何でもかまいません。動的に読み取る必要があります。Persons クラスがその動的な性質を説明するための最良の構造は何ですか。

4

1 に答える 1

7

これを解析する1つの方法は、ルートJSONオブジェクトの子要素にマップすることです。

scala> parse(res).children.map(_.extract[Person])
res3: List[Person] = List(Person(Name One,Address(Some Street,Some City)), Person(Name Two,Address(Some Other Street,Some Other City)))

または、フィールド名を保持する必要がある場合は、次のようにします。

scala> Map() ++ parse(res).children.map { case f: JField => (f.name, f.extract[Person]) }
res4: scala.collection.immutable.Map[String,Person] = Map(person1 -> Person(Name One,Address(Some Street,Some City)), person2 -> Person(Name Two,Address(Some Other Street,Some Other City)))

2.8の機能を使い始めると、次の直接的な方法が機能することに注意してください。

parse(res).extract[Map[String, Person]]
于 2010-05-22T17:02:51.623 に答える