Comment charger un fichier JSON à l'aide de Jouer avec Scala
J'ai besoin de charger un JSON
fichier avec une liste de villes dans l'un de mes contrôleurs, afin de les transmettre à un vue par la suite.
J'ai placé le fichier ici: app/assets/jsons/countriesToCities.json
(En passant: est-ce un endroit approprié, ou dois-je le placer ailleurs?)
J'ai lu le docs et je peux voir qu'il est possible de créer un JsValue
à partir d'une chaîne: https://www.playframework.com/documentation/2.4.x/ScalaJson#Using-string-parsing
Je veux créer un JsValue
dans un mode similaire. La différence est que je veux charger le contenu d'un fichier, pas à partir d'une chaîne... je n'ai pas trouvé d'extrait de code sur la façon de le faire, malheureusement.
Dois-je utiliser autre chose pour lire le fichier en une chaîne de caractères, et seulement alors, l'utilisation de la méthode d'analyse sur cette chaîne?
Des extraits de Code avec des exemples sur la façon de le faire dans les réponses seront très appréciés! 🙂
Je vous remercie beaucoup à l'avance!
Pas vraiment un doublon @M. V. . Mais avec Dylan réponse, je pense que je vais réussir à le résoudre! Merci!
OriginalL'auteur Henrique Ferrolho | 2015-12-17
Vous devez vous connecter pour publier un commentaire.
Ressemble le commentaire à propos de la double possible est de savoir comment lire un fichier à partir de votre app/assets dossier. Ma réponse est sur l'analyse de Json à partir d'un flux. Combinez les deux et vous devriez être bon d'aller.
Json.parse
accepte quelques-uns des différents types d'arguments, dont l'un estInputStream
.P. S. Lorsque vous ne pouvez pas trouver ce que vous cherchez dans les écrits de docs, Les Docs de l'API sont un bon endroit pour commencer.
FileInputStream
appartient àjava.io
, mais je suis en utilisant Scala + Play, pas de Java + Play. Dois-je vraiment utiliser lejava.io
, ou est-il un autre moyen?Réponse courte est non. Réponse longue: Scala n'a pas beaucoup de fonctionnalités intégrées pour IO. Le
scala.io.Source
objet est le plus proche de votre pari, vous pourriez utiliser pour charger un fichier dans une chaîne de caractères, puis passer à la chaîneJson.parse
. Vous pouvez aussi regarder dans les autres bibliothèques avec IO solutions, mais c'est trop d'effort pour remplacer les deux lignes de code.Je note que depuis que vous êtes en utilisant Scala + Play, vous êtes vraiment en utilisant Scala + Java + Play. Vous pouvez toujours utiliser
java.io
sans perdre de Scala.OriginalL'auteur Dylan
Voici comment j'ai réussi à le résoudre:
Merci pour l'aide! 🙂
Json.parse
pouvez lire directement à partir d'un flux, il est donc préférable d'utiliser laInputStream
version plutôt que d'obtenir les lignes, de faire une chaîne d'eux, et puis l'analyser.Le
.getLines
n'est pas nécessaire ici. Aussi, il serait préférable de fermer le résultat de lafromFile
appel (unio.Source
exemple).OriginalL'auteur Henrique Ferrolho
De Jouer 2.6, de l'Environnement a l'
getExistingFile
,getFile
,resource
etresourceAsStream
méthodes, E. g.:(Remarque, dans ce cas de données.json est à l'intérieur de la conf dossier)
https://www.playframework.com/documentation/2.6.x/api/scala/index.html#play.api.Environment
OriginalL'auteur flurdy