2

I am new in scala developing and maybe it's repeated question here, trying to parse json by circe lib, I know how to parse json to get specific value from it but I want to it dynamically by giving json path for any json. For example we have this json below like input, and json path like this $.store.book[*].author

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

and output will be like this:

[
   "Nigel Rees",
   "Evelyn Waugh",
   "Herman Melville",
   "J. R. R. Tolkien"
]

by using jayway I can do it in easy way, but I want to do it by using circe. below code where I am using jayway

val fileStream = getClass.getResourceAsStream("/sample_json.json")
var rawJson: String = Source.fromInputStream(fileStream).getLines.mkString.stripMargin
val jsonPath: String = "$..book[2]"
val result = JsonPath.read[AnyVal](rawJson, jsonPath)
Baktiyar Bekbergen
  • 374
  • 2
  • 4
  • 24
  • Have you tried JsonPath integration from the [gatling](https://github.com/gatling/gatling/tree/master/gatling-jsonpath/src/main/scala/io/gatling/jsonpath) library? Also, in case of constant queries you may consider using of `dynamic typing` features of [circe](https://github.com/circe/circe-optics/blob/master/optics/src/main/scala/io/circe/optics/JsonPath.scala) or [dijon](https://github.com/pathikrit/dijon) libraries. – Andriy Plokhotnyuk Dec 24 '19 at 06:36
  • @AndriyPlokhotnyuk yes of course I have tried it, and best decision is Jayway which can do same thing, but I want to try to use circe lib for my practice – Baktiyar Bekbergen Dec 24 '19 at 06:40
  • @BakhtiyarBekbergen what exactly the issue is? Your path is supplied entirely at runtime as a string, or what? – Oleg Pyzhcov Dec 25 '19 at 12:04

0 Answers0