なんとなくできるんだろうなぁ、と思いながらも試した事は無かったのですが、普通にできました。テストはコンソールでやっていますが、本来は Android で ArrayAdapter とセットで使用するので、どちらでもあまり大差はありません。 というより、Google Gson で文字列 JSON がほぼストレートに ListView にセットされるところが最も素敵なところです。
import java.util.ArrayList; import java.util.ListIterator; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class Main { // Livedoor の お天気Webサービス用 (JSON用) class Weather { // ArrayList で定義 ArrayList<PinpointLocation> pinpointLocations; } class Weather2 { // 配列で定義 PinpointLocation[] pinpointLocations; } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ System.out.println("開始"); // データをセット String result = Tools.httpGet( "http://weather.livedoor.com/forecast/webservice/json/v1?city=270000", "utf-8", null ); System.out.println(result); Gson gson = new Gson(); // ArrayList として処理 Weather weatherData = gson.fromJson(result, Weather.class); // 多いので40番目から ListIterator<PinpointLocation> li = weatherData.pinpointLocations.listIterator(39); while(li.hasNext()) { PinpointLocation data = li.next(); System.out.println(data.name + " : " + data.link ); } System.out.println("-----------------------------------------"); // 配列 Weather2 weatherData2 = gson.fromJson(result, Weather2.class); // 多いので40番目から for( int i = 39; i < weatherData2.pinpointLocations.length; i++ ) { PinpointLocation data = weatherData2.pinpointLocations[i]; System.out.println(data.name + " : " + data.link ); } // 多いので40番目から( 39 番までを削除 ) for( int i = 38; i >= 0; i-- ) { weatherData.pinpointLocations.remove(i); } Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create(); String json1 = gsonPretty.toJson(weatherData); System.out.println( json1 ); } }
後重要なのは、逆の toJson ですが、この場合は整形する方法があるので、ここも重要です。
Gson prettyGson = new GsonBuilder().setPrettyPrinting().create(); String json = prettyGson.toJson(weatherData);
Web アクセス用簡易 static クラス
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Iterator; import java.util.Map; public class Tools { // 指定した URL へ 任意の charset で処理 public static String httpGet( String targetUrl,String targetCharset,Map<String,String> params) { StringBuffer web_data = new StringBuffer(); try { // Query String の作成( 必要無ければ引数を null とする ) String data = ""; if ( params != null ) { Iterator<String> it = params.keySet().iterator(); String key = null; String value = null; while(it.hasNext()) { key = it.next().toString(); value = params.get(key); if ( !data.equals("") ) { data += "&"; } data += key + "=" + URLEncoder.encode(value, targetCharset) ; } if ( !data.equals("") ) { targetUrl = targetUrl + "?" + data; } } // ********************************************** // インターネットへの接続 // ********************************************** // 読み込む WEB上のターゲット URL url = new URL(targetUrl); // 接続オブジェクト HttpURLConnection http = (HttpURLConnection)url.openConnection(); // GET メソッド http.setRequestMethod("GET"); // 接続 http.connect(); // ********************************************** // ストリームとして読み込む準備 // ********************************************** // 以下読み込み3点セット InputStream / InputStreamReader / BufferedReader InputStream input_stream = http.getInputStream(); // UTF-8 でリーダーを作成 InputStreamReader input_stream_reader = new InputStreamReader(input_stream, targetCharset); // 行単位で読み込む為の準備 BufferedReader buffered_reader = new BufferedReader(input_stream_reader); // ********************************************** // 行の一括読み込み // ********************************************** String line_buffer = null; // BufferedReader は、readLine が null を返すと読み込み終了 while ( null != (line_buffer = buffered_reader.readLine() ) ) { web_data.append( line_buffer ); web_data.append( "\n" ); } // ********************************************** // 接続解除 // ********************************************** http.disconnect(); } catch(Exception e) { // 失敗 System.out.println(e.getMessage()); } return web_data.toString(); } }
タグ:JSON
|
【Javaの最新記事】
- Java : Okhttp( GET ) と Google Gson( JSON => オブジェクト ) で WEB アクセス
- JSP で単純な MySQL アクセス ( mysql-connector-java-5.1.47.jar )
- Java : 単純な MySQL アクセス ( mysql-connector-java-5.1.47.jar )
- Eclipse に 画面分割があるとは知らなかった。
- Java sun.jdbc.odbc.JdbcOdbcDriver から Microsoft Excel
- Java sun.jdbc.odbc.JdbcOdbcDriver から Microsoft Access
- Pleiades All in One 4.4.2.v20150310(Luna) の Java 32bit Full Edition が、自己解凍書庫で、Vector に登録されている件
- Eclipse : プライベートクラスの作成
- Java の授業で社員マスタメンテを作成しています
- Java で MySQL 5.6 に接続。今時は、ベンダー(MySQL/Oracle)のドライバーが優秀
- Java:Windows(C++)で言うところのアクセラレータキー
- JTableの標準化(ほぼ完成版)
- Javaバッチビルド:iText(PDF)で、MSGOTHIC.TTCを使って4つのレイヤーを使い、位置指定してコンテンツを作成するサンプル
- Java:Eclipse+VisualEditor+ZIPファイル内エントリ一覧(JTable)と解凍
- Java:Eclipse+VisualEditorでフリーソフトのカレンダーコンボボックスを使う
- 【JavaSwing】ポップアップメニューを実装するスケルトン
- 【Java】UTF8で書き出すにはFileInputStreamレベルで先に書く
- 【Java】JComとJACOBでCOMを呼び出す(スタンバイ状態にする)
- 【JavaSwing】キー入力制限とフィールド入力制限
- 【Java】Java用設定ファイル(XML)