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

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

詳細はこちら
Ruby

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

3回答

2621閲覧

Ruby on RailsでのJSON形式エラーでの解決方法

miyanon

総合スコア2

Ruby

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2020/12/27 07:36

お世話になります。

現在Ruby on Rails6で
掲示板アプりを作ろうとしているのですが
投稿メッセージを入力して送信しようとすると
JSONによる変換がうまく行かないのか
エラーが出ます。
@msg_data = JSON.parse(data)
という箇所でエラーが出ます。

エラー分を訳するかぎり
ハッシュから文字列への変換がうまく行ってない
ということぐらいはわかるのですが
どうすればいいか分からず、
すみませんがご教示ください。

発生している問題・エラーメッセージ

TypeError in MsgboardController#index
no implicit conversion of Hash into String

該当のソースコード

Ruby

1class MsgboardController < ApplicationController 2 layout 'msgboard' 3 4 def initialize 5 super 6 begin 7 @msg_data = JSON.parse(File.read("data.text")) 8 rescue 9 @msg_data =Hash.new 10 end 11 @msg_data.each do |key,obj| 12 if Time.now.to_i - key.to_i >24*60*60 then 13 @msg_data.delete(key) 14 end 15 end 16 File.write("data.txt",@msg_data.to_json) 17 end 18 def index 19 if request.post? then 20 obj= Mydata.new(msg:params['msg'], name:params['name'],mail:params['mail']) 21 @msg_data[Time.now.to_i] = obj 22 data = @msg_data_to_json 23 File.write("data.txt", data) 24 @msg_data = JSON.parse(data) 25 end 26 end 27end 28 29class Mydata 30 attr_accessor :name 31 attr_accessor :mail 32 attr_accessor :msg 33 34 def initialize msg:msg, name:name, mail:mail 35 self.name = name 36 self.mail = mail 37 self.msg = msg 38 end 39end

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

ruby 2.6.6
Rails 6.0.3.2

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

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

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

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

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

winterboum

2020/12/29 23:47

エラーを全文載せてください。 どのファイルのどの行で起きたか、という情報もあるかと思います。それも重要です。 codeから行数数えるのは間違えるかもなので、「ここだ」 とマークもしてください @msg_data_to_json が突然出てきます。どこでどのように定義してますか?
guest

回答3

0

すみません ありがとうございました。

data = @msg_data_to_json

の箇所が間違っておりました。

to_jsonメソッドの前は
_ではなく.にしなければいけないことに気がつき
修正したら動くようになりました。

投稿2020/12/31 04:50

miyanon

総合スコア2

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

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

0

自己解決

すみません ありがとうございました。

data = @msg_data_to_json

の箇所が間違っておりました。

to_jsonメソッドの前は
_ではなく.にしなければいけないことに気がつき
修正したら動くようになりました。

投稿2020/12/31 04:49

miyanon

総合スコア2

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

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

0

rails c でデバッグしたらいかがですかね。

ちょっと詳しい方ならここからわかるかもしれませんが、data.textというファイルの中身にも依存するかなという気がしましたので、私なら、というレベルで恐縮ですがおすすめいたします。

data.text

data.txt

と2種類いるのでそこも怪しそうですね。

投稿2020/12/27 07:47

educ_gt

総合スコア282

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

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

miyanon

2020/12/28 11:02

ありがとうございます、とりあえずdata.txtで統一したのですが変わらずでした。
educ_gt

2020/12/30 14:50

``` @msg_data = JSON.parse(File.read("data.text")) ``` エラーここですよね。。 JSON.parse('[1,2,{"name":"tanaka","age":19}]') こんな感じで値を渡したらどうでしょうか。 これでエラー箇所が変われば、File.readがおかしそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問