Ответ 1
Вот как мне удалось это решить:
val source: String = Source.fromFile("app/assets/jsons/countriesToCities.json").getLines.mkString
val json: JsValue = Json.parse(source)
Спасибо за помощь!:)
Мне нужно загрузить файл JSON
со списком городов в одном из моих контроллеров, чтобы передать его в представление .
Я разместил файл здесь: app/assets/jsons/countriesToCities.json
(Кстати: это подходящее место, или я должен разместить его где-то еще?)
Я прочитал docs, и я вижу, что можно создать JsValue
из строки: https://www.playframework.com/documentation/2.4.x/ScalaJson#Using-string-parsing
Я хочу создать JsValue
аналогичным образом. Разница в том, что я хочу загрузить контент из файла, а не из строки... Я не нашел фрагмента кода о том, как это сделать, к сожалению.
Должен ли я использовать что-то еще для чтения файла в строку и только затем использовать метод разбора в этой строке?
Сцены кода с примерами о том, как это сделать в ответах, будут высоко оценены!:)
Спасибо вам заблаговременно!
Вот как мне удалось это решить:
val source: String = Source.fromFile("app/assets/jsons/countriesToCities.json").getLines.mkString
val json: JsValue = Json.parse(source)
Спасибо за помощь!:)
Похоже, что комментарий о возможном дубликате - это чтение файла из папки вашего приложения/активов. Мой ответ о том, как разбирать Json из потока. Объедините два, и вам должно быть хорошо идти.
Json.parse
принимает несколько разных типов аргументов, один из которых InputStream
.
val stream = new FileInputStream(file)
val json = try { Json.parse(stream) } finally { stream.close() }
P.S. Когда вы не можете найти то, что ищете в письменных документах, API Docs - это хорошее место для начала.
В 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