2013-04-08 3 views
0

Je reçois ce qui suit en utilisant l'analyse scala json.motif correspondre à une dans une liste

import scala.util.parsing.json.JSON._ 
val j: String = """["this",["a","b",["c","d"]]]""" 
val parse_test=parseFull(j) 

maintenant de ce que j'obtenir un résultat de l'option [Tout]

je peux utiliser get pour obtenir les résultats (dans ce cas, je ne suis pas préoccupé par le format JSON invalide, ce qui devrait être en sécurité, droit?)

parse_test.get 
res26: Any = List(this, List(a, b, List(c, d))) 

maintenant, comment dois-je aller à aller de ce Any au List que je l'avais prévu? Je suppose que je devrais utiliser la correspondance de modèle, mais je ne peux pas le comprendre. Toute aide serait appréciée

+0

Pourriez-vous préciser ce qui manque pour vous? Qu'entendez-vous par "la liste" que j'avais prévue "? Quelle était la liste que vous attendiez? Littéralement. – Floris

+0

fondamentalement, je veux dire, je voudrais bien que le résultat serait déjà par une liste, comme dans je pourrais faire 'parse_test.get.head' etc. La chaîne json que j'ai que je veux manipuler comme une liste de la liste de formulaire (a, liste (a, b, liste (c, d))). Est-ce que ça a du sens? – JPC

+0

Vous dites que vous obtenez 'Liste (ceci, Liste (a, b, Liste (c, d))) mais vous voulez' Liste (a, Liste (a, b, Liste (c, d))) '? Non, tu n'as pas de sens. Qu'est-il arrivé à la chaîne '" this "'? – Floris

Répondre

0

Ce que vous pouvez faire est un pli avec un match de motif et un casting:

test_result.fold[List[String]](Nil){ 
    case _ :: list :: _ => list.asInstanceOf[List[String]] 
    case _ => Nil 
} 

En supposant que vous essayez de jeter du premier élément et que le 2ème élément est la liste que vous vouliez.

Edit:

Sachez que si le 2ème élément n'est pas une liste cette distribution provoquerait une exception. Il est vraiment Dealing horribles avec une liste [Tous] et essayer de décoder ce qui est là-dedans ...

0

Voici ma solution:

scala> val Some(xs @ List(_*)) = parse_test 
xs: List[Any] = List(this, List(a, b, List(c, d))) 
+0

Cela entraînera une erreur de correspondance si la valeur de parse_test est None, mais après avoir lu la question de l'affiche peut-être qu'il ne s'en soucie pas. Je pense que quelque chose comme la désérialisation devrait avoir ce genre de sécurité, mais hausser les épaules. – coltfred

Questions connexes