2017-10-03 2 views
0

Prenez la chaîne JSON suivante comme exemple:Comment analyser récursive un seul champ JSON qui est défini plusieurs fois, en jeu Json

val document = """{ 
    "id": "12345", 
    "createdTime": "13332517", 
    "data": { 
     "status": "active", 
     "createdTime": "13345178" 
    }""" 

Le champ createdTime est défini deux fois dans le document. Pour retourner le createdTime à la couche supérieure est faite par:

val createdTime = Json.parse(document \ "createdTime") 

Prenez la chaîne JSON suivante; il est le même que le premier exemple, mais il est maintenant un tableau:

val document1 = """[{ 
    "id": "12345", 
    "createdTime": "13332517", 
    "data": { 
     "status": "active", 
     "createdTime": "13345178" 
    } 
}, { 
    "id": "67890", 
    "createdTime": "13332565", 
    "data": { 
     "status": "active", 
     "createdTime": "13345173" 
    } 
}]""" 

Pour revenir récursive « CreatedTime » est défini comme:

val createdTime1 = Json.parse(document1) \\ "createdTime" 

Cependant cela renvoie également les createdTime imbriqués champs. Existe-t-il un moyen de renvoyer récursivement uniquement la couche supérieure createdTime?

Répondre

1

Lorsque vous analysez le document1 et le transtypez en JsArray, vous devez disposer d'un tableau. Ensuite, vous pouvez itérer sur la valeur avec map pour obtenir le calque supérieur createdTime.

val createdTimes = Json.parse(document1).as[JsArray].value.map(_ \ "createdTime")