2014-09-23 3 views
5

Учитывая, вложенный JSON в конфигурации, как:Доступ к элементам массива в конфигурации типизированного

{ 
    app: { 
     id: "app1" 
     instances: 2, 
     servers: [ 
      { host: "farm1.myco.com", port: 9876 } 
      { host: "farm2.myco.com", port: 9876 } 
     ] 
    } 
} 

При использовании типизированной конфигурации, можно обратиться к элементам массива непосредственно в пути?

На данный момент мы должны сделать что-то вроде следующего, который является своего рода многословным:

val servers = config.getObjectList("app.id") 
val server = servers.get(0).toConfig 
val host = server.getString("host") 
val port = server.getInt("port") 

Нечто подобное было бы идеально:

val host = config.getString("app.id.servers.0.host")?

Поддерживает ли API-интерфейс TypeSafe что-то вроде этого?

ответ

0

Реализовать вспомогательную функцию, которая превращает объект в нечто более управляемое. Это то, что я использовал.

def toList(jList:java.util.List[_ <: ConfigObject]) : List[Config] = { 
    val l = jList.asScala.toList 
    val slConfig = l.map(item => { 
     item.toConfig 
    }) 

    slConfig 
} 

Использование этой функции будет выглядеть

val servers = toList(objectList) 

for(server <- servers) { 
    println(server.getString("host")) 
    println(server.getString("port")) 
} 
+0

Вопрос в том, как обращаться к элементу массива. Представьте, что члены вашей команды имели «{имя, возраст, zipcode}». Как я могу получить почтовый индекс первого члена? Это то, что я хочу в моем примере выше: хост и порт первого экземпляра. – maasg

+0

Отредактировал мой ответ. – quickinsights

Смежные вопросы