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, поскольку у кода нет способа идентифицировать экранированные данные.

Другие вопросы по тегам