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

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

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

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

1947閲覧

processingでJSONファイルを一行ずつ表示させたい

HK0101

総合スコア1

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2020/12/01 15:07

編集2020/12/02 01:14

前提・実現したいこと

processing初心者です。
processingでJSONファイルをランダムに一行ずつ表示させたいです。
特定の列を全行表示させることには成功しましたが、一行ずつ表示できず困っています。

画像は現在の表示画面です。
ドラセナ、オリーブ、パキラ...と一つずつ順番に表示させたいです。
イメージ説明

1回再生するごとにカウンター(変数countでカウント)を1増やし、countの値が配列の長さ以上になったらカウンターをリセット(countの値を0)。こうすることで、繰り返し単語が順に表示される。という方法でやろうとしましたができませんでした。

JSONファイルです。(観葉植物の名前、値段、買った日付)

[ { "id": 1, "date": "2020-10-28T08:09:06.220Z", "yen": 12584, "name": "ドラセナ" }, { "id": 2, "date": "2020-10-28T08:57:41.717Z", "yen": 2000, "name": "オリーブ" }, { "id": 3, "date": "2020-10-29T08:15:33.598Z", "yen": 2100, "name": "パキラ" }, { "id": 4, "date": "2020-10-29T08:30:47.760Z", "yen": 1499, "name": "カポック(シェフレラ)" }, { "id": 5, "date": "2020-10-30T07:22:10.030Z", "yen": 1298, "name": "エバーフレッシュ " }, { "id": 6, "date": "2020-10-30T07:22:40.745Z", "yen": 3820, "name": "サンスベリア" }, { "id": 7, "date": "2020-10-30T07:23:21.197Z", "yen": 3820, "name": "フィカス・ウンベラータ" }, { "id": 8, "date": "2020-10-30T07:24:08.782Z", "yen": 1400, "name": "ゲッケイジュ" }, { "id": 9, "date": "2020-11-10T05:43:37.586Z", "yen": 10164, "name": "カネノナルキ" }, { "id": 10, "date": "2020-11-10T05:44:43.239Z", "yen": 4099, "name": "ポトス" }, { "id": 11, "date": "2020-11-24T01:57:56.665Z", "yen": 1017, "name": "アイビー" }, { "id": 12, "date": "2020-11-24T02:00:16.532Z", "yen": 4099, "name": "シュガーバイン" }, { "id": 13, "date": "2020-11-24T02:09:09.418Z", "yen": 2343, "name": "ハートカズラ" }, { "id": 14, "date": "2020-11-24T02:17:37.956Z", "yen": 2900, "name": "ワイヤープランツ" }, { "id": 15, "date": "2020-11-24T02:21:18.713Z", "yen": 6080, "name": "ガジュマル" } ]

オブジェクトでは配列のように行を指定することはできないのでしょうか?

難しければcsvファイルで再挑戦してみようと思います。

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

The type of the expression must be an array type but it resolved to String

該当のソースコード

Film[] films; int count = 0; void setup() { size(700, 700); frameRate(3); JSONArray filmArray = loadJSONArray("plants.json"); films = new Film[filmArray.size()]; for (int i = 0; i < films.length; i++) { JSONObject o = filmArray.getJSONObject(i); films[i] = new Film(o); } } void draw() { background(0); for (int i = 0; i < films.length; i++) { int x = i*100 + 100; int y = i*20 + 100; films[i].display(100, y); } //int x = int(random(width)); //int y = int(random(height)); } class Film { String name; String date; int yen; int id; Film(JSONObject f) { name = f.getString("name"); date = f.getString("date"); yen = f.getInt("yen"); id = f.getInt("id"); } void display(int x, int y) { float ratingGray = map(yen, 1000, 10000, 102, 255); pushMatrix(); translate(x, y); //rotate(-QUARTER_PI); fill(ratingGray); text(name[count], 0, 0,400,20); count++; if(count >= films.length) count = 0; popMatrix(); } }

試したこと

Stringで新たに宣言を試そうとしましたが、どの箇所に記述していいか分からず、、、
そもそもオブジェクトでカウントを使うのが間違っているのでしょうか?

ご指導よろしくお願いします。

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

processing ver3.5.4を使用

以下のサイトを参考にしました。
b-04 配列を使う - Proessing 学習ノート
https://processing.org/reference/text_.html
JSONファイルを読み込むには | 自己啓発。人生について考える

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

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

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

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

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

dodox86

2020/12/01 23:40

添付の画像が謎過ぎます。使っているJSONのファイル("jojo.json" ?)自体を質問文中に提示してください。
HK0101

2020/12/02 01:05

更新させていただきました。
guest

回答2

0

ベストアンサー

1回再生するごとにカウンター(変数countでカウント)を1増やし、countの値が配列の長さ以上になったらカウンターをリセット(countの値を0)。こうすることで、繰り返し単語が順に表示される。という方法でやろうとしましたができませんでした。

恐らく、こういうことなのでは。

Processing

1Film[] films; 2int count = 0; 3 4void setup() { 5 size(700, 700); 6 frameRate(3); 7 JSONArray filmArray = loadJSONArray("plants.json"); 8 films = new Film[filmArray.size()]; 9 for (int i = 0; i < films.length; i++) { 10 JSONObject o = filmArray.getJSONObject(i); 11 films[i] = new Film(o); 12 } 13} 14 15void draw() { 16 background(0); 17 int y = count * 20 + 100; 18 films[count].display(100, y); 19 20 ++count; 21 if (count >= films.length) { 22 count = 0; 23 } 24 25 //int x = int(random(width)); 26 //int y = int(random(height)); 27} 28 29class Film { 30 31 String name; 32 String date; 33 int yen; 34 int id; 35 36 Film(JSONObject f) { 37 name = f.getString("name"); 38 date = f.getString("date"); 39 yen = f.getInt("yen"); 40 id = f.getInt("id"); 41 } 42 43 void display(int x, int y) { 44 float ratingGray = map(yen, 1000, 10000, 102, 255); 45 pushMatrix(); 46 translate(x, y); 47 //rotate(-QUARTER_PI); 48 fill(ratingGray); 49 50/* 51 text(name[count], 0, 0,400,20); 52 count++; 53 if(count >= films.length) count = 0; 54*/ 55 text(name, 0, 0, 400, 20); 56 popMatrix(); 57 } 58}

ポイントとしては、 Filmクラスでのdisplay()メソッドはひとつのFilmクラスのインタンスオブジェクトに対する操作なのだから、そこでcountなどを参照、操作するのは適切ではないです。(作り方、設計の仕方によっては可能ですが) draw()の方でひとつずつ表示するよう、countを順繰りに操作していきます。

投稿2020/12/02 02:54

dodox86

総合スコア9256

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

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

HK0101

2020/12/02 03:09

ご回答ありがとうございます!やりたいことができ、大変勉強になりました。
guest

0

添付している図は何を言いたいのでしょう?

エラーメッセージを読むならば、配列でないもの(文字列)を配列として読み込もうとしている、と言っています。

オブジェクトでは配列のように行を指定することはできない

ではなく、オブジェクトを配列として読み込むことは出来ない、です。
プログラムが期待している形式と、読み込ませたjsonファイルの形式が合っていないのでは。jspnファイルについては示されていないので想像ですが。

投稿2020/12/01 22:16

thkana

総合スコア7703

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

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

HK0101

2020/12/02 01:07

ありがとうございます。謎が解けました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問