なんとなくできるんだろうなぁ、と思いながらも試した事は無かったのですが、普通にできました。テストはコンソールでやっていますが、本来は 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)




























