2019年7月28日 星期日

用JAVA抓取URL上的.json資料


因為google前幾頁找不太到如何從網站上抓取.json寫入java中,
故將研究出來的程式碼記錄下來,
以下以Impl實作方法方式編寫,用政府資料開放平台中的登革熱疫情資料作為示範



//從網站上讀出.json檔案的方法

public String readJSON(String url) throws JSONException, IOException {

    //new一個stringbulider出來

    StringBuilder out = new StringBuilder();

    //new一個URL出來,放入url參數

    URL website = new URL(url);

    URLConnection uc = website.openConnection();

    //new一個bufferedreader出來,以匿名物件寫InputStreamReader及getInputStream,註記編碼是UTF-8

    BufferedReader br1 = new BufferedReader(new InputStreamReader(uc.getInputStream(), "UTF-8"));

    //宣告一個字串

    String inputline = null;

    //當讀入字串不為空時,將內容加入stringbulider中

    while ((inputline = br1.readLine()) != null) {

       out.append(inputline);

    }

    br1.close();

    return out.toString();

 }  


//讀出後將.json寫入資料庫的方法

public void addJSON(String json) throws SQLException, JSONException {

    //SQL"插入"的語法

    sqlstr = "INSERT INTO DengueFever(Year, Month, City, Gender, Age, DiseaseCase) VALUES(?,?,?,?,?,?)";

    PreparedStatement state = conn.prepareStatement(sqlstr);

    //建立jsonArray

    JSONArray jArray = new JSONArray(json);

    for (int i = 0; i < jArray.length(); i++) {

       JSONObject jsonObject = (JSONObject) jArray.get(i);

       //sql語法中第一個問號放入"發病年份",因為是字串的jsonObject,故須以Integer.parseInt強制轉型為數字

       state.setInt(1, Integer.parseInt((String) jsonObject.get("發病年份")));

       state.setInt(2, Integer.parseInt((String) jsonObject.get("發病月份")));

       state.setString(3, (String) jsonObject.get("縣市"));

       state.setString(4, (String) jsonObject.get("性別"));

       state.setString(5, (String) jsonObject.get("年齡層"));

       state.setInt(6, Integer.parseInt((String) jsonObject.get("確定病例數")));

       state.executeUpdate();

       }

    System.out.println("AddJSON success.");

    state.close();

    }

}

以上,同行見笑,

如有任何指教請不吝留言告知,謝謝。

沒有留言:

張貼留言

無暇的程式碼(Clean code)金句

The only valid measurement of code quality: WTFs/minute.