#ruby #json #yaml
#ruby #json #yaml
Вопрос:
Я работаю с Rubyoverflow gem, который позволяет работать с Stackoverflow API из кода Ruby. И я заметил, что иногда я получаю сообщение об ошибке:
Invalid JSON string
Я попытался проанализировать код и выяснить, что ошибка произошла, когда ответ Stackoverflow содержит символы, отличные от ascii.
Rubyoverflow использует HTTParty gem, а HTTParty gem использует Crack gem для анализа файлов JSON.
module Crack
class JSON
def self.parse(json)
json = json.delete!("^u{0000}-u{007F}") # here is my fix
YAML.load(unescape(convert_json_to_yaml(json)))
rescue ArgumentError => e
raise ParseError, "Invalid JSON string"
end
Я добавил одну строку кода для удаления всех символов, отличных от ascii, из JSON, и ошибка была исправлена.
Теперь я хочу понять, кто тот человек, которому мне нужно сообщить об этой ошибке.
- Возможно ли включить символы, отличные от ascii, в документ JSON?
- Возможно ли включить символы, отличные от ascii, в документ YAML?
- Позволяют ли стандарты включать символы, отличные от ascii, в JSON и YAML -> ошибка в классе YAML. Это правильно? Кто автор этого класса и какой лучший способ исправить эту ошибку?
Комментарии:
1. Быстрый поиск показывает, что с автором можно связаться на github . Именно туда вы должны отправить отчет об ошибке, если это действительно ошибка. Я не думаю, что это так, но вместо этого я думаю, что проблема в том, что вы не понимаете спецификацию или как работать с Unicode. Я хотел бы, чтобы вопрос был пересмотрен, потому что «я хочу понять, кто тот человек, которому мне нужно сообщить об этой ошибке», на данный момент не совсем подходящий вопрос для SO.
2. В этом примере нет моего кода. Stackoverflow публикует JSON, Rubyoverflow работает с этим JSON, HTTParty получает этот JSON, Crack преобразует JSON в YAML, а YAML-lib загружает этот YAML. Вопрос в том, кто из них является причиной ошибки. Почему вы решили, что причина в Rubyoverflow? Вы уверены, что Stackoverflow выдает правильный JSON? Вы уверены, что все остальные драгоценные камни и библиотеки работают правильно?
3. @железный дровосек: Убедитесь, что вы ссылаетесь на правильный проект github ;). Это форк оригинального проекта, без дополнительных коммитов
4. @phsr, ну, поскольку ты не дал ссылку на правильный… Rubyoverflow от phsr 🙂
Ответ №1:
Документы JSON и YAML должны быть декодированы в соответствии с кодировкой, указанной в заголовках HTTP, а затем полученный документ должен быть проанализирован соответствующим образом. И в JSON, и в YAML есть способ выражения символов, отличных от ASCII, в ASCII, но ни один из них не предписывает их использование в отличие от использования полной кодировки.