jsonからの値を取り扱う際に、いつも以下の2通りのパターンのどちらなのかわからず混乱してしまいます。

hoge[:title]
hoge.title

※キーに対するバリューを取得する際を想定

Jsonをパースした際のハッシュの取り扱い

hoge = resp.body.map{|hoge| JSON.parse(hoge)}

OK
hoge[0].title

NG
hoge[0]["title"]

一方、ハッシュを変数に入れる際?は

hoge = {:id=>"123", :title=>"テスト"}

OK
hoge["title"]

NG
hoge.title

変数に入れるか入れないかで挙動が違うのかなと思ったのですが、
ピンポイントで解説している文献に出会わなかったため、質問させて頂きました。

また、hashでのfindの挙動も時々不思議に思うことがあります。
こちらももし参考になるURlなどございましたら教えて頂けると幸いです。

宜しくお願いします。