🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

2957閲覧

外部JSONファイルの読み込みを実行ファイルを起点とする方法。

tkshp

総合スコア174

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/10/17 08:16

編集2019/10/17 08:36

前提・実現したいこと

外部JSONファイルを、実行ファイルを起点としたパスで読み込みたいのですが、
その方法があればご教示お願いします。

試したこと

同階層にtest.txtファイルとsample.rbファイルを作成しました。

test.txt

txt

1{ 2 "key": { 3 "key1":"value1", 4 "key2":"value2" 5 } 6}

sample.rb

ruby

1require 'json' 2 3json_file_path = 'test.txt' 4 5json_data = File.open(json_file_path) do |io| 6 JSON.load(io) 7end 8 9puts json_data["key"]["key1"] #value1

ターミナルで、sample.rbと同階層の場所で下記rubyコマンドを実行したら、
正常にtest.txtを読み込めましたが、
sample.rbと違う階層で下記rubyコマンドを実行したら、test.txtを読み込めず、どこかのファイルを読み込もうとしてエラーを起こしました。

ruby sample.rb

エラーメッセージ。

C:/Ruby24-x64/lib/ruby/2.4.0/json/common.rb:156:in `parse': 751: unexpected token at '<xml Version="1.0"> (JSON::ParserError)

質問

・質問1。
File.openで指定するパスは、ターミナルのrubyコマンドを実行した場所を起点とした相対パスになりますか?

・質問2。
File.openもしくは別の方法で、外部JSONファイルを実行ファイルを起点とした相対パスで読み込む方法のご教示をお願い致します。

補足情報(FW/ツールのバージョンなど)

ruby 2.4.5p335

追記

requireメソッドの場合は、require_relativeメソッドに代えることで解決できたのですが、
File.openメソッドにはそのような相対パスの指定方法、もしくは他の代替メソッドはないですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

回答2
今実行中のfileの full path が __FILE__ で得られます。
ですから FILE を起点にすればOK
たとえば File.expand_path('../test.txt',__FILE__)

投稿2019/10/17 08:43

編集2019/10/17 08:44
winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkshp

2019/10/17 08:47

ご回答ありがとうございます。 勉強になりました。 ありがとうございました。
guest

0

カレントディレクトリを起点として相対パスは解釈されます
ですので、あなたの都合のいいようにカレントディレクトリを変更すればいいです

投稿2019/10/17 08:23

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問