Kasasagi’s memorandum

JavaとかProcessingとか。最近はAtcoderとか。

JSONの読み込みをやってみた

こんばんは。来週からテストが始まるかささぎです。こんなことやってる暇ねえだろ。

JSONファイルを読みこむプログラムを作成したので、メモっときます。

参考文献です→JavaでJSONオブジェクトを扱う - Qiita

 

1.そもそもJSONとは。

 13日の金曜日に登場する仮面の怪物ではなく、データのフォーマットの形式です。XML形式と比べ、属性やテキストノードが必要なく、可読性も高いというメリットがあります。

 Javaで読み取る際には、自分はorg.jsonのjarファイルを用いました(HP→

http://www.java2s.com/Code/Jar/o/Downloadorgjsonjar.htm)。JSONを利用する際のライブラリは多数あるようで、宗教戦争が勃発することもあるとかないとか。

 

2. コード

今回はこんな感じのJSONデータを読み取ります。弊学弊学科弊クラスの時間割のデータを適当に作ったやつです。

{
"name": "電磁気学",
"day": "Mon",
"period": 1,
},
{
"name": "保健体育",
"day": "Mon",
"period": 2,
},…

Intellijからコピペでそのまま貼れるんだすげー(心の声)

読み取り手順は、まずソースをJSONオブジェクトに変換し、配列に格納します。

JSONArray JArray = new JSONArray(data);

 それを、JSONObjectに入れることで、データがJobjectに格納できます。

JSONObject Jobject = JArray.getJSONObject(n);

説明がいまいち上手くできない(勉強不足)ので、ソースコードを載せます。

Processingとの連携テストも兼ねて、実行結果をスケッチにアウトプットするようにしました。

gistfa08051830bbc5d75f5731392b1c1fe8

gist9b5dc0b4c179776fa1882e6f4af740b0

軽く解説します。

~Jsontest.java

String型のdataにはファイルを読み取った値が入ります。メイン関数内でぬるぽは投げます。

JSONObjectはObject型で格納されるため、読み取るデータはキャストしてやる必要があります。Object型はint型に直接変換できないようなので、float型で読み取ってからキャストしました。もっと簡潔に書けるかも。

JSONで読み取ったパラメータはSubjectクラスに格納しました。プログラム内での便宜上、曜日は数値として管理します。

 

~GUIbyP5.java

あまり特筆することはないと思いますが、size()関数はvoid settings内で呼ぶ必要があります。processing3.0以降、外部IDEを利用してsetup()内でsize()関数を呼ぶとこんな感じのエラーが出ます。

f:id:yh9092:20171116232226p:plain

PDEを利用する際は問題ないのですが、まあ一応settings()内に書いておいたほうがいいと思います。

実行結果

f:id:yh9092:20171116232539p:plain

地味。。。

 

JSONは楽でいいですね。活躍する場面も多いと思うので、使い方を覚えられるようになりたいです。

それではおやすみなさい。テスト勉強はまだしていない。