tsujimotterのノートブック

日曜数学者 tsujimotter の「趣味で数学」実践ノート

Processing 2.0 で twitter4j と JSONObject を同時に使う

なぜこの組み合わせかというと、JSONObjectを使うときにエラーが出るからです。
twitter4jの使い方はこちらの記事を見てください。



twitter4jのライブラリをスケッチフォルダにインストールした後で、次のようなProcessingスケッチを書いてみましょう。

import twitter4j.conf.*;
import twitter4j.internal.async.*;
import twitter4j.internal.org.json.*;
import twitter4j.internal.logging.*;
import twitter4j.http.*;
import twitter4j.internal.util.*;
import twitter4j.api.*;
import twitter4j.util.*;
import twitter4j.internal.http.*;
import twitter4j.*;


void setup() {
  size(300, 300);  
  
  JSONObject json = loadJSONObject("test.json");

  String x = json.getString("x");
  String y = json.getString("y");
  
  println("x = " + x);
  println("y = " + y);
}

void draw() {
  
}

非常に簡単なコードです。twitter4jのライブラリを読んでいる以外は、単純に setup の中で "test.json" を読んでいるだけです。
もちろん、スケッチと同じフォルダ内に次のような "test.json" を置いておきます。

{
	"x": "2", 
	"y": "123"
}

すると次のようなエラーが出るでしょう。

The type JSONObject is ambiguous

"ambiguous = あいまい" ですから、複数のJSONObjectがあってどちらか判断が付かないということでしょう。

おそらくこれは、twitter4j 2.2.5 のライブラリ内でも JSONObject が宣言されていて、Processing 2.0 のものとどちらか判断がつかないのだと思います。
その証拠に、import文をすべて削除すると、何のエラーもなく実行されます。

したがって、FQDNでProcessing 2.0 のJSONObjectを指定しなければなりません。

「Processing 2.0 JSONObejct」でGoogle検索すると、次のクラスリファレンスが出てきます。
がんばって探すと、JSONObjectのFQDNは、

processing.data.JSONObject

だということがわかりますので、そのようにソースコードを修正します。

参考: Class JSONObject

具体的には、次の通りです。

import twitter4j.conf.*;
import twitter4j.internal.async.*;
import twitter4j.internal.org.json.*;
import twitter4j.internal.logging.*;
import twitter4j.http.*;
import twitter4j.internal.util.*;
import twitter4j.api.*;
import twitter4j.util.*;
import twitter4j.internal.http.*;
import twitter4j.*;


void setup() {
  size(300, 300);  
  
  processing.data.JSONObject json = loadJSONObject("test.json");

  String x = json.getString("x");
  String y = json.getString("y");
  
  println("x = " + x);
  println("y = " + y);
}

void draw() {
  
}

では、この辺で。