Ruby/Faraday: 応答本文を翻訳して解析するにはどうすればよいですか?
概要
API接続にはFaraday gemを使用しています。私の呼び出しからの応答の本文は次のようになります。
「 { “稼働時間”: “112795”, “started_at”: “2021-32-14 17:32:11”, “バージョン”: “2.0.4”, 「画面」: [ { 「インデックス」: 0、 “名前”: “.”, 「幅」: 2560、 「高さ」: 1342、 “is_primary”: true }] }”
この応答で .to_json を呼び出そうとすると、次のエラーが発生します。
JSON.parse() では次のエラーが発生します。
JSON::ParserError: 809: unexpected token at '{
"uptime": "112851",
"started_at": "2021-32-14 17:32:11",
"version": "2.0.4",
"screens": [
{
"index": 0,
"name": "\\\\.\\DISPLAY1",
"width": 2560,
"height": 1342,
"is_primary": true
}
]
}'
この応答を適切な形式に変換し、標準の Ruby キー ペア ハッシュとして利用し、そのキーによって値を取得する方法はありますか?
PS: これが役立つかどうかはわかりませんが、Faraday を使用する前は HTTParty gem を使用しており、応答は適切にコード化されているようでした。これは次のとおりです。この Encoding::UnknownConversionError: エラーは表示されませんでした。
解決策
以下のスニペットで試すことができます
clean_body = response_body.sub(/^\xEF\xBB\xBF/, '');
clean_body.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '');
parsed_hash = JSON.parse(clean_body)