gson を使用して、この返された JSON を何らかのデータ構造に変換して、有用なデータを抽出できるようにしようとしています。
例えば:
http://search.twitter.com/search.json?q=test&rpp=1
戻り値:
{
"completed_in":0.028,
"max_id":196386333906837504,
"max_id_str":"196386333906837504",
"next_page":"?page=2&max_id=196386333906837504&q=test&rpp=1",
"page":1,
"query":"test",
"refresh_url":"?since_id=196386333906837504&q=test",
"results":[
{
"created_at":"Sat, 28 Apr 2012 23:52:05 +0000",
"from_user":"della_ky",
"from_user_id":525641596,
"from_user_id_str":"525641596",
"from_user_name":"kydella modeste",
"geo":null,
"id":196386333906837504,
"id_str":"196386333906837504",
"iso_language_code":"en",
"metadata":{
"result_type":"recent"
},
"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2159990525\/webcam-toy-photo3_20_2__normal.jpg",
"profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2159990525\/webcam-toy-photo3_20_2__normal.jpg",
"source":"<a href="http:\/\/mobile.twitter.com" rel="nofollow">Mobile Web<\/a>",
"text":"RT @Y__U__NOOO: #SongsIKnowOffByHeart ALL SONGS I LISTEN TO. BRAIN, Y U NO REMEMBER TEST ANSWERS LIKE THAT?!?",
"to_user":null,
"to_user_id":null,
"to_user_id_str":null,
"to_user_name":null
}
],
"results_per_page":1,
"since_id":0,
"since_id_str":"0"
}
最終的には、送信者の名前とツイートの日付/時刻を含むツイートのリストを出力できるようにしたいと考えています。
私は gson のドキュメントを読みましたが、正直言って頭がいっぱいです - そこにはたくさんの新しい概念があります。
そのクラスのインスタンスを生成するために、JSON の構造に正確にマップするクラスを定義する必要がありますか? もしそうなら、これは非常に融通が利かない/骨の折れるようです。理想的には、任意の形式で JSON を処理し、自動的に使用できる構造を提供してくれるものを探しています...
誰かが私にいくつかの指針を与えることができますか? これに慣れていない - より詳細で、音節が少ない言葉であるほど良いです!
更新 - これについての回答のおかげで、クラスをまとめて Twitter JSON をキャプチャすることにしました。ただし、JSONにはオブジェクトのArrayListが埋め込まれているため、少し苦労しています...これまでのところ、
public class tweetData {
private double completed_in;
private long max_id;
private long max_id_str;
private String next_page;
private int page;
private String query;
private String refresh_url;
private List<tweetDetails> tweets = new ArrayList<tweetDetails>();
}
と
public class tweetDetails {
private String created_at;
private String from_user;
private long from_user_id;
private long from_user_id_str;
private String from_user_name;
private String geo;
private long id;
private long id_str;
private String iso_language_code;
// "metadata":
// {
// "result_type":"recent"
// },
private String profile_image_url;
private String profile_image_url_https;
private String source;
private String text;
private String to_user;
private String to_user_id;
private String to_user_id_str;
private String to_user_name;
}
私がインスタンス化しているもの
URI uri = new URI("http", "search.twitter.com", "/search.json", "q="+ searchTerms + "&rrp=" + RRP, null);
URL twitterSearch = uri.toURL();
URLConnection yc = twitterSearch.openConnection();
JsonReader reader = new JsonReader(new InputStreamReader(yc.getInputStream()));
Gson gson = new Gson();
tweetData data = gson.fromJson(reader, tweetData.class);
System.out.println(data);
基本的な name:values は正しく取り込まれていますが、ArrayList はそうではありません。
tweetData : 0.17196614959919140865196614959919140865?page=2&max_id=196614959919140865&q=test1test?since_id=196614959919140865&q=testSIZE 0[]
だから、私はまだ少し苦労しています-これ以上のヒントは大歓迎です!
ティア、トム