Techioz Blog

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)