我正在尝试使用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);
基本名称:值已正确填充,但ArrayList未正确填充。
tweetData : 0.17196614959919140865196614959919140865?page=2&max_id=196614959919140865&q=test1test?since_id=196614959919140865&q=testSIZE 0[]
因此,我仍然在挣扎-任何其他提示,我们将不胜感激!
蒂娅汤姆
我是否需要定义一个完全映射到JSON结构的类,以便随后填充该类的实例?如果是这样,这似乎很不灵活/费力。
是。GSON是一个可用于将Java对象转换为其JSON表示形式的库。它还可以用于将JSON字符串转换为等效的Java对象。这确实非常强大,因为您可以从JSON表示中自动实例化Java对象。假设您的JSON不会改变其结构,则只需定义 一次 适当的Java对象表示 即可 。
理想情况下,我正在寻找可以处理任何形式的JSON并为我提供可以自动使用的结构的东西…
但是,如果您不想自动进行序列化/反序列化,请尝试查看一个更简单的库,例如java.net/projects/jsonp。
您可以通过查询键从中提取内容:
final JSONObject json = new JSONObject(theJsonString); final String id = json.getString("max_id"); final JSONArray results = json.getJSONArray("results"); final String user = results.getJSONObject(2).getString("from_user");