UnparseableJsonResponse для одного указанного c, действительный JSON - PullRequest
1 голос
/ 04 февраля 2020

У меня есть стандартный агент Dialogflow, использующий javascript / node.js webhooks. Это работает отлично в большинстве случаев. Недавно я столкнулся с проблемой, которая привела меня к полной потере. В настоящее время я сохраняю некоторые JSON -объекты в conv.data, чтобы минимизировать внешние вызовы API, которые должен делать мой webhook. Для одного указанного c JSON -объекта, извлеченного из внешнего API с использованием узла-извлечения, ответ, который я отправляю со своей стороны, выглядит совершенно обычным. Я использую firebase, и в журналах firebase не отображаются сообщения об ошибках или признаки того, что может быть проблема. Но я получаю эту ошибку в консоли действий Google:

UnparseableJsonResponse API версии 2: не удалось проанализировать JSON строку ответа с ошибкой «INVALID_ARGUMENT»: «Разбор прекращен до конца ввода. 8, \ \ "3 \\": 12}, \\ "w ^".

И в журналах стековых драйверов полученный ответ не начинается с обычного

Получен ответ от агента с телом: HTTP / 1.1 200 OK Сервер: ... et c

Вместо этого он начинается в середине внешнего API- JSON -файла

Получен ответ от агента с телом: 8, \\ "3 \\": 12}, \\ "winPercentage \\": 1392}}}}, ... et c

Это не происходит при первом ответе агента после извлечения JSON из внешнего API. При втором ответе агента после извлечения JSON происходит сбой, независимо от того, была ли информация из JSON используется этим вторым вызовом, независимо от всего , кроме , если файл JSON имеет значение ov записано между первым и вторым вызовом. Если файл перезаписан, программа работает отлично. Таким образом, проблема, скорее всего, связана с хранением и / или анализом этого указанного c JSON файла. К сожалению, API, который я использую в этом приложении, не является общедоступным c, и из-за NDA я не могу дать никакого доступа к этому JSON, поэтому я понимаю, что вы, вероятно, не можете мне помочь. Однако я дам столько информации о JSON, сколько смогу, и надеюсь на лучшее:

  • Это действительно в соответствии с https://codebeautify.org/jsonvalidator и jsonlint.com
  • Он структурирован точно так же, как и другие JSON файлы из того же API, которые не обрабатывают sh приложение
  • Это немного больше, чем другие JSON файлы из того же API. В нем около 340 000 символов, остальные около 280-300 000.
  • Все JSON, как и те, которые работают, принадлежат компании Swedi sh, поэтому необычные символы, такие как å, ä и ö скорее всего, присутствуют.
  • Сообщение об ошибке всегда одинаково, за исключением того, что начало ответа находится в разных местах в файле JSON. "8, \\" 3 \\ ": 12}, ...", "ostPosition \\": 2 ... "," 3804, \\ "startPoints \\": 2960 ... "являются некоторыми примерами .

Я чрезвычайно благодарен за любую помощь, которую я могу получить, даже если это только то, какие вопросы мне нужно задать, или где я мог бы попытаться устранить неполадки в следующем.

1 Ответ

1 голос
/ 04 февраля 2020

Я подозреваю, что проблема в том, что JSON, который вы пытаетесь сохранить, больше, чем размер буфера, который они выделяют для conv.data, хотя я не могу найти никакой документации, чтобы сказать, что есть какой-то конкретный c предел .

Я бы проверил, где находятся строки, которые вы видите в заголовке ошибки, в JSON и постараюсь, чтобы он был ниже этого предела.

...