как экранировать двоеточие специального символа (':') в jsonpath - PullRequest
0 голосов
/ 14 ноября 2018

Json:

{
    "im:rating": {
        "label": "1"
    }
}

При попытке использовать Jsonpath в Groovy Если я использую это '$. Im: rating'

Отображается следующая ошибка

Caused by: com.nebhale.jsonpath.InvalidJsonPathExpressionException: Illegal

символ 'PathCharacter [types = [], значение = :, position = 4]' $ .Im: рейтинг ---- ^ Недопустимый символ 'PathCharacter [types = [SIMPLE_NAME_CHARACTER, LETTER, COMPLEX_NAME_CHARACTER], значение = r, позиция = 5]' $ .Im: рейтинг ----- ^ Недопустимый символ 'PathCharacter [types = [SIMPLE_NAME_CHARACTER, LETTER, COMPLEX_NAME_CHARACTER], значение = a, позиция = 6]' $ .Im: рейтинг ------ ^ Недопустимый символ 'PathCharacter [types = [SIMPLE_NAME_CHARACTER, LETTER, COMPLEX_NAME_CHARACTER], значение = t, позиция = 7]' $ .Im: рейтинг ------- ^ Недопустимый символ 'PathCharacter [types = [SIMPLE_NAME_CHARACTER, LETTER, COMPLEX_NAME_CHARACTER], значение = i, позиция = 8]' $ .Im: рейтинг -------- ^ Недопустимый символ 'PathCharacter [types = [SIMPLE_NAME_CHARACTER, LETTER, COMPLEX_NAME_CHARACTER], значение = n, позиция = 9]' $ .Im: рейтинг --------- ^ Недопустимый символ 'PathCharacter [types = [SIMPLE_NAME_CHARACTER, LETTER, COMPLEX_NAME_CHARACTER], значение = g, позиция = 10]' $ .Im: рейтинг ---------- ^

  at com.nebhale.jsonpath.JsonPath.compile(JsonPath.java:85)
  at com.nebhale.jsonpath.JsonPath.read(JsonPath.java:182)

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Мы можем получить альтернативный доступ со следующим

$ .. этикетка '

0 голосов
/ 14 ноября 2018

Я предполагаю, что вы используете библиотеку JsonPath по адресу:

https://github.com/nebhale/JsonPath

В общем случае при переполнении стека некорректно не публиковать правильный пример кода и не ссылаться наточная библиотека (включая версию), которую вы используете.Без этой информации сообщество остается угадывать и проводить исследования с вашей стороны.

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

Следующий код:

@Grab('com.nebhale.jsonpath:jsonpath:1.2')
import com.nebhale.jsonpath.*

def path = JsonPath.compile('$.im:rating')

при запуске приводит к ошибке, которую вы описываете.

Если вместо этого мы попробуем использовать встроенный groovy JsonSlurper:

import groovy.json.*

def json = '''\
{
    "im:rating": {
        "label": "1"
    }
}'''

def parsed = new JsonSlurper().parseText(json)
println "value: ${parsed['im:rating']}"

, то получим:

~> groovy use_slurper_instead.groovy
value: [label:1]

, т.е. нет проблем с использованием ключей с : символов в них.Я бы поднял вопрос с JsonPath.

...