Как загрузить JSON файл, используя Play с помощью Scala

Мне нужно загрузить файл JSON со списком городов в одном из моих контроллеров, чтобы передать его в представление .

Я разместил файл здесь: app/assets/jsons/countriesToCities.json
(Кстати: это подходящее место, или я должен разместить его где-то еще?)

Я прочитал docs, и я вижу, что можно создать JsValue из строки: https://www.playframework.com/documentation/2.4.x/ScalaJson#Using-string-parsing

Я хочу создать JsValue аналогичным образом. Разница в том, что я хочу загрузить контент из файла, а не из строки... Я не нашел фрагмента кода о том, как это сделать, к сожалению.
Должен ли я использовать что-то еще для чтения файла в строку и только затем использовать метод разбора в этой строке?

Сцены кода с примерами о том, как это сделать в ответах, будут высоко оценены!:)

Спасибо вам заблаговременно!

Ответы

Ответ 1

Вот как мне удалось это решить:

val source: String = Source.fromFile("app/assets/jsons/countriesToCities.json").getLines.mkString
val json: JsValue = Json.parse(source)

Спасибо за помощь!:)

Ответ 2

Похоже, что комментарий о возможном дубликате - это чтение файла из папки вашего приложения/активов. Мой ответ о том, как разбирать Json из потока. Объедините два, и вам должно быть хорошо идти.

Json.parse принимает несколько разных типов аргументов, один из которых InputStream.

val stream = new FileInputStream(file)
val json = try {  Json.parse(stream) } finally { stream.close() }

P.S. Когда вы не можете найти то, что ищете в письменных документах, API Docs - это хорошее место для начала.

Ответ 3

В Play 2.6 среда имеет методы getExistingFile, getFile, resource и resourceAsStream, например:

class Something @Inject (environment: play.api.Environment) {
  // ...
  environment.resourceAsStream("data.json") map ( Json.parse(_) )

(Обратите внимание: в этом случае data.json находится внутри папки conf)

https://www.playframework.com/documentation/2.6.x/api/scala/index.html#play.api.Environment