Как применить точечный JSONPath для Play JsValue - PullRequest
1 голос
/ 31 октября 2019

У меня есть переменная String, представляющая некоторый точечный JsPath (например, store.book[0].title), и у меня есть объект play.api.libs.json.JsValue. Я хочу применить путь как переменную к объекту и получить Option [JsValue]. Есть ли библиотеки, которые могли бы это сделать? Если нет, то как лучше это сделать?

1 Ответ

0 голосов
/ 31 октября 2019

Для этого вы можете использовать дижон .

Добавить зависимости:

libraryDependency += "com.github.pathikrit" %% "dijon" % "0.3.0"

Добавить импорт:

import scala.language.dynamics._
import com.github.pathikrit.dijon._

Анализировать ваш JSON изстроку и запросить ее:

val json = parse(
  """{
     "store": {
       "book": [
         {
            "title": "Functional Programming in Scala"
         }
       ]
     }
   }""")

assert(json.store.book(0).title == "Functional Programming in Scala")
assert(json.store.book(0).price == None)

def findInJson(json: SomeJson)(selector: SomeJson => SomeJson): SomeJson =
  selector(json)

assert(findInJson(json)(_.store.book(0).title) == "Functional Programming in Scala")
...