Groovy JSONSlurper JSON-значение с экранированными кавычками
Я разрабатываю небольшой инструмент, написанный на Groovy, который анализирует строки JSON в электронных письмах. Некоторые из этих строк JSON имеют значения JSON, которые содержат экранированные кавычки.
Например:
{
"hello": "world with \"quotation marks\""
}
Для разбора этих строк я использую JsonSlurper от Groovy. Следующий код демонстрирует мою проблему:
import groovy.json.JsonException
import groovy.json.JsonSlurper
try {
print new JsonSlurper().parseText('''
{
"hello": "world with \"quotation marks\""
}
''')
} catch (JsonException | IllegalArgumentException e) {
print e
}
Смотрите https://groovyconsole.appspot.com/script/6193189027315712 для живой демонстрации.
При выполнении этого кода выдается следующее исключение:
groovy.json.JsonException: expecting '}' or ',' but got current char 'q' with an int value of 113 The current character read is 'q' with an int value of 113 expecting '}' or ',' but got current char 'q' with an int value of 113 line number 3 index number 35 "hello": "world with "quotation marks"" ............................^
Таким образом, экранирование кавычки игнорируется JsonSlurper. К сожалению, я не могу контролировать ввод, то есть строки JSON. Поэтому мне нужно найти способ разбить такую строку JSON на карту или любую другую подходящую структуру данных.
1 ответ
Строка не была должным образом экранирована в JSON. Текстовые данные должны быть такими:
'''
{
"hello": "world with \\\"quotation marks\\\""
}
'''
Строка, которую вы получаете, указывает, что тело письма содержит json в формате:
{
"hello": "world with "quotation marks""
}
пока должно быть как
{
"hello": "world with \"quotation marks\""
}
Если раньше это так, то вы не можете проанализировать недействительный json, поскольку у кода нет способа идентифицировать экранированные данные.