JSON.parse с допустимой строкой JSON возвращает nil в обработчике запросов Rack. Та же строка хорошо разбирает за пределами стойки - PullRequest
0 голосов
/ 21 июня 2019

Мой сервер Sinatra получает строку JSON как часть тела запроса POST.Тело запроса читается и преобразуется в строку, подобную этой:

request.body.rewind
body_str = request.body.read.force_encoding('utf-8')

Когда я пытаюсь преобразовать эту строку в хэш, используя:

webhook_hash = JSON.parse(body_str)
logger.info(webhook_hash)

webhook_hash - ноль, нопарсер не выдает никаких ошибок.

Я проверил, что body_str является допустимым JSON, используя следующие методы:

  • выведите строку в STDOUT и используйте jsonlint
  • сохраните запростело к файлу, затем откройте файл в отдельном скрипте ruby ​​и JSON.parse.Выполнение следующего с bundle exec приводит к правильному ожидаемому JSON:
require 'json'
json_from_file = File.read("webhook-body.json")
obj = JSON.parse(json_from_file)

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

Полагаю, проблема связана со средой Sinatra / Rack.Я относительно младший в отношении вещей, Ruby, поэтому любые указания о том, как отладить или исправить это, с благодарностью!

...