5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RailsでJSONファイルを読み込み、配列として扱う

Posted at

備忘録。グローバル変数とか使っているのもしかしたらよくないかもしれないですね。あと、そもそもコントローラにこう言った内容は書くべきなのでしょうか。

目的

自分がPHPで作った、第66回理工展の特集ページ一覧をRailsで再現するために調べました。

実践

JSON

適当にpublicフォルダの下に置きました。
/public/json/sample.jsonというJSONファイルを扱うと仮定します。中身はこんな感じ。
(先述の特集ページ一覧に類似したJSONを作りました。)

/public/json/sample.json
[
    {
        "name": "脱出ゲーム バイオプロット",
        "text": [
            "――世界を、壊せ。",
            "チームで協力して謎解きをして、陰謀を暴け。"
        ],
        "url": "/feature/hexatrick"
    },
    {
        "name": "ダンスマスターズ",
        "text": [
            "私たちは年に1度の学園祭だけでなく、全国で踊りを披露するサークルです!"
        ],
        "url": "/feature/dancemaster"
    },
    {
        "name": "パズル謎解き パズルエンジニア",
        "text": [
            "パズルの国で、秘宝のパズルが失われてしまった!",
            "謎を解きながら、そのピースを探そう!"
        ],
        "url": "/feature/puzzlemaster"
    }

このJSONファイルを読み込み、配列として扱えるようにするのがこの記事での目標です。

アプリ構築

すでにvisitorというアプリを作っていたので流用しました。とりあえずこれで再現できると思われるコマンドを記載します。(既存のアプリを使ったため動作確認はしていません。ただ大丈夫なはず。)

rails new sample_app
rails g controller visitor json

これにより、sample_appというアプリを作り、その中でvisitorというコントローラを作りました。visitor内にはjsonというビューも最初から作っています。

ビュー・JSON読み込み

では、本題のビューを作っていきましょう。

/app/views/visitor/json.html.erb
<% require "json" %>
<% File.open("#{Rails.public_path}/json/sample.json") do |j| %>
<% # File.open("#{Rails.root}/public/json/sample.json") do |j| %>
<% # JSON.load(j) %>
<% $json_str = JSON.load(j)%>
<% end %>
<%= $json_str[1]["name"] %>

1行目で、RubyのJSONを扱うためのモジュールを呼び出します。
2行目で、JSONを呼び出します。#{Rails.public_path}というのはRailsのpublicフォルダのパスです。なお、public内のファイルは、HTMLタグなどで参照するときは、/json/sample.jsonで呼び出せるはずなのですが、Ruby言語内で呼び出すときは、絶対パスでは見つけてくれないようです。
3行目は、2行目の代わりにRailsのルートディレクトリから追った場合です。個人的にメモしたかった。
4行目のコメントアウトを外して、5, 7行目をコメントアウトすると、JSONを読み込んだ結果がそのまま出力されます。ハッシュです。
5行目でJSONをハッシュの形で読み込んで、json_strというグローバル変数に格納しています。
7行目では、5行目で格納したグローバル変数(配列)からデータを呼び出しています。今回は、1列(0からなので2番目)のnameを呼び出すので、このビューを表示した際には、ダンスマスターズが出力されるはずです。

rails sしてlocalhost:3000/visitor/jsonを開いて、ダンスマスターズが表示されていれば、ここまで正常に動いたことになります。

あとがき

とりあえずJSONファイルを読み込んで、配列として扱うことはできました。
今日は眠いので、また今度繰り返しのやり方を勉強して、続編を書きたいと思います。

参考記事

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?