Мой сервер 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, поэтому любые указания о том, как отладить или исправить это, с благодарностью!