質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

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

JSON

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

Q&A

解決済

1回答

605閲覧

JSON.parseするとTypeErrorになる

pecchan

総合スコア592

Ruby on Rails 5

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

JSON

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

0グッド

0クリップ

投稿2020/09/05 08:41

編集2020/09/05 09:01

rails5.2です。

rails c からJSON型のデータを操作したく以下のように入力しました。

まずモデルを読み込み、

ruby

1i = Item.last

試しにparseしてみました。

ruby

1hash=JSON.parse(i.images)

すると、以下のようなエラーになりました。

console

1Traceback (most recent call last): 2 1: from (irb):2 3TypeError (no implicit conversion of Array into String)

rails db consoleにてデータを確認すると、一応データは入ってるようです。

ruby

1sqlite> select images from Items where id=26; 2["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg","26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jp

なぜエラーになるのでしょうか?
キーと値の形じゃ無いからでしょうか?
imagesカラムは、JSON型で定義してあります。

先輩方教えて下さい。宜しくお願いします。

ruby

12.6.3 :003 > p i.images 2[#<ImageUploader:0x0000000005bb1de0 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb1778 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @versions={:thumb=>#<ImageUploader::Uploader46825060:0x0000000005bb16b0 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb11b0 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/thumb_26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @versions={}, @parent_version=#<ImageUploader:0x0000000005bb1de0 ...>, @storage=#<CarrierWave::Storage::File:0x0000000005bb1598 @uploader=#<ImageUploader::Uploader46825060:0x0000000005bb16b0 ...>, @cache_called=nil>>}, @storage=#<CarrierWave::Storage::File:0x0000000005bb1c00 @uploader=#<ImageUploader:0x0000000005bb1de0 ...>, @cache_called=nil>>, #<ImageUploader:0x0000000005bb1138 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb0d50 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @versions={:thumb=>#<ImageUploader::Uploader46825060:0x0000000005bb0d00 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb0850 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/thumb_26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @versions={}, @parent_version=#<ImageUploader:0x0000000005bb1138 ...>, @storage=#<CarrierWave::Storage::File:0x0000000005bb0c10 @uploader=#<ImageUploader::Uploader46825060:0x0000000005bb0d00 ...>, @cache_called=nil>>}, @storage=#<CarrierWave::Storage::File:0x0000000005bb1070 @uploader=#<ImageUploader:0x0000000005bb1138 ...>, @cache_called=nil>>] 3 => [#<ImageUploader:0x0000000005bb1de0 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb1778 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @versions={:thumb=>#<ImageUploader::Uploader46825060:0x0000000005bb16b0 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb11b0 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/thumb_26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", @versions={}, @parent_version=#<ImageUploader:0x0000000005bb1de0 ...>, @storage=#<CarrierWave::Storage::File:0x0000000005bb1598 @uploader=#<ImageUploader::Uploader46825060:0x0000000005bb16b0 ...>, @cache_called=nil>>}, @storage=#<CarrierWave::Storage::File:0x0000000005bb1c00 @uploader=#<ImageUploader:0x0000000005bb1de0 ...>, @cache_called=nil>>, #<ImageUploader:0x0000000005bb1138 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb0d50 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @versions={:thumb=>#<ImageUploader::Uploader46825060:0x0000000005bb0d00 @model=#<Item id: 26, title: "え", description: "d", images: ["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg"], public_uid: "d83edf2bb305", user_id: 1, category_id: 2, sub_category_id: 23, prefecture1_id: 14, prefecture2_id: nil, prefecture3_id: nil, prefecture4_id: nil, prefecture5_id: nil, paused: false, created_at: "2020-09-04 07:37:14", updated_at: "2020-09-04 07:37:14">, @mounted_as=:images, @staged=false, @file=#<CarrierWave::SanitizedFile:0x0000000005bb0850 @file="/home/ec2-user/environment/gv/public/uploads/item/images/26/thumb_26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @original_filename=nil, @content_type=nil, @content=nil>, @filename=nil, @cache_id=nil, @identifier="26195e88-e983-42e9-95a3-8e1c866b35a6_1568.jpg", @versions={}, @parent_version=#<ImageUploader:0x0000000005bb1138 ...>, @storage=#<CarrierWave::Storage::File:0x0000000005bb0c10 @uploader=#<ImageUploader::Uploader46825060:0x0000000005bb0d00 ...>, @cache_called=nil>>}, @storage=#<CarrierWave::Storage::File:0x0000000005bb1070 @uploader=#<ImageUploader:0x0000000005bb1138 ...>, @cache_called=nil>>] 42.6.3 :004 > 52.6.3 :005 >

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

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

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

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

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

guest

回答1

0

ベストアンサー

p i.images の出力結果はどうなるでしょうか

おそらく

["26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg", "26195e88-e983-42e9-95a3-8e1c866b35a6_1565.jpg"]

のようになるはずで、 すでに i.images は Ruby オブジェクトの Array になっているなと思います
(つまり JSON.parse する必要はない / ActiveRecord がマッピングをすでに行っている

投稿2020/09/05 08:50

unhappychoice

総合スコア1531

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

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

pecchan

2020/09/05 09:01

有難う御座います。 p i.images すると沢山出てきましたので質問の所に貼り付けました。
pecchan

2020/09/05 09:04

全カラムが出てきました。 このimagesはcarriewaveがセットしてるのですが、 ※DBは、postgres JSON型のカラムに、carriewaveが配列でセットしているという解釈で合ってますでしょうか?
unhappychoice

2020/09/05 09:16 編集

carrierwave を利用しているのであれば、 全カラムと言うか、 `ImageUploader` のインスタンスが返っているので、 `i.images.to_a` で単純な配列に出来るのかと思いましたmm
pecchan

2020/09/05 09:20

何度もお付き合いいただき有難う御座います。
unhappychoice

2020/09/05 09:25

> JSON型のカラムに、carriewaveが配列でセットしているという解釈で合ってますでしょうか? あっていると思いますmm - 保存時: carrierwave が Ruby の File object -> ファイルパスの配列 JSON にする -> DBに保存 - 読み出し時: carrierwave が DB のJSON -> Ruby のファイルパス Array -> ImageUploader に読み込み みたいな感じだとおもいますmm
pecchan

2020/09/05 09:26

あぁぁ!なるほど!イメージ付きました!!! 有難う御座います( ;∀;)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問