Как получить значение узла json из строки json, используя путь json? - PullRequest
0 голосов
/ 08 мая 2018

Ниже мой JSON файл

{
  "squadName": "Super hero squad",
  "homeTown": "Metro City",
  "formed": 2016,
  "secretBase": "Super tower",
  "active": true,
  "members": [
    {
      "name": "Molecule Man",
      "age": 29,
      "secretIdentity": "Dan Jukes",
      "powers": [
        "Radiation resistance",
        "Turning tiny",
        "Radiation blast"
      ]
    },
    {
      "name": "Madame Uppercut",
      "age": 39,
      "secretIdentity": "Jane Wilson",
      "powers": [
        "Million tonne punch",
        "Damage resistance",
        "Superhuman reflexes"
      ]
    },
    {
      "name": "Eternal Flame",
      "age": 1000000,
      "secretIdentity": "Unknown",
      "powers": [
        "Immortality",
        "Heat Immunity",
        "Inferno",
        "Teleportation",
        "Interdimensional travel"
      ]
    }
  ]
}

И JSON-путь для получения всех имен участников - $ .members [*]. Name

Я использую Ready API и скрипт Groovy для чтения этого json по указанному выше пути, но я сталкиваюсь с сообщением об ошибке, которое говорит java.lang.NoClassDefFoundError: Could not initialize class net.minidev.json.JSONValue, когда я выполняю приведенный ниже фрагмент кода

import com.jayway.jsonpath.*

Object dataObject = JsonPath.parse(jsonmentionedabove).read(
'$.members[*].name')

У меня есть следующие jars в моих папках Ready API lib & ext и у меня на компьютере версия java - 9.0.1

json-path-2.4.0, json-smart-2.3

Не могли бы вы сообщить мне, в чем причина этой проблемы?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Размещение файла asm-1.0.2.jar в папке Ready API lib решило проблему.

0 голосов
/ 09 мая 2018

Я не знаком с Ready API или библиотеками json-path и json-smart, но с чистым groovy вы можете просто сделать:

import groovy.json.*

def str  = """<the json string in your question>"""
def json = new JsonSlurper().parseText(str)
def memberNames = json.members*.name

println memberNames.join(", ")

, который при выполнении выведет:

Molecule Man, Madame Uppercut, Eternal Flame

JsonSlurper возвращает структуру карт java.util.Map, по которой можно перемещаться с использованием обычных операций groovy findAll, collect и т. Д. Или оператора * spead (*.), как ввыше.

...