Techioz Blog

Rubyで文字列ではなくキーとしてシンボルを持つJSON文字列データを解析するにはどうすればよいですか?

概要

これがJSON文字列の例です

json = "{:status=>\"ok\", :hitcount=>\"1\", :request_date=>Wed, 10 Oct 2019 00:00:00 +0000}"

以下に示すスニペットを試しましたが、これは機能せず、エラー JSON::ParserError (765: 予期しないトークン

require 'json'
JSON.parse(json)

解決策

残念ながら、JSON は Ruby シンボルを表すことができません。また、JSON ではキーと値の両方を引用符で囲む必要があるため、指定したものは有効な JSON ではなく、JSON パーサーが壊れます。あなたが望むのは次のことだけです:

json = "{\"status\": \"ok\", \"hitcount\": \"1\", \"request_date\": \"Wed, 10 Oct 2019 00:00:00 +0000\"}"

そして、Ruby JSON パーサー (@engineersmnky に感謝!) には気の利いた機能があります。

JSON.parse(json, symbolize_name: true)