基于java的web开发:API调用获取数据并将其写入数据库(JSON字符串解析)

支持

  • JSON字符串分析读取所需包:
    链接:https://pan.baidu.com/s/1tKPdEm_miwvT6EuJIeM5vg
    提取码:kir9
  • java文件内引入json解析包:
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
  • 预先写好的SQL类(调用函数提供插入操作)
  • 调用API:https://wuliang.art/ncov/doc.html#/home

API数据类型

{
     
  "code": 200,
  "message": "SUCCESS",
  "data": [
    {
     
      "date": "01.20",
      "country": "中国",
      "newConfirm": 0,
      "description": "",
      "dead": 0,
      "confirm_cuts": "",
      "confirm_add": "0",
      "confirm": 0,
      "dead_cuts": "",
      "newDead": 0,
      "province": "台湾",
      "heal": 0,
      "now_confirm_cuts": "",
      "heal_cuts": "",
      "newHeal": 0
    },
    ............
    ]

分析

定义所需变量

        int i;//用于循环所用变量
		URL url;//调用API的路径
		URLConnection conn;//建立url连接
		InputStream in;//url连接的字节流
		InputStreamReader isr;//url连接的字符流
		BufferedReader br;//用于字符流逐行读取
		String line,str,string;
		StringBuffer sb;//缓冲字符串提高效率
		JSONObject jsonObject,JO;//处理JSON字符串中的JSON对象
		JSONArray jsonArray;//处理json字符串中的json数组
		String dead="",date="",heal="",confirm="",province="",now_confirm="",city="";//对应数据中的不同键值
		SQL sql=new SQL();//调用的sql类

从API中获取数据并写入JSON字符串

                path="https://wuliang.art/ncov/statistics/getProvinceHistoryList?provinceName=%E5%8F%B0%E6%B9%BE";
                //创建一个URL对象
				url=new URL(path);
				//创建一个URLConnection连接对象
				conn=url.openConnection();
				//创建一个输入流来接收网页
				in=conn.getInputStream();
				//字节流——>字符流
				isr = new InputStreamReader(in,"UTF-8");
				//从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
				br = new BufferedReader(isr);
	            line = null;
				sb=new StringBuffer();			
				while ((line=br.readLine())!=null) {
     
					sb.append(line);				
	            }
				str=sb.toString();

JSON字符串转化为数据录入数据库

                //JSON解析字符串
				jsonObject=JSONObject.fromObject(str);
				jsonArray = jsonObject.getJSONArray("data");
				//缓冲字符串存储sql语句,便于多条数据同时插入
				string="insert into province(province,date,confirm,now_confirm,heal,dead) values ";
				sb=new StringBuffer();
				sb.append(string);
				//遍历JSON中的数组
				for (i=0;i<jsonArray.size();i++){
     
					//数组内数据分析
				     JO = jsonArray.getJSONObject(i);
				     date = JO.getString("date");			     
				     heal = JO.getString("heal");
				     dead = JO.getString("dead");
				     confirm = JO.getString("confirm");
				     province = JO.getString("province");
				     now_confirm = Integer.toString(Integer.parseInt(confirm)-Integer.parseInt(heal)-Integer.parseInt(dead));
				     //将字符串加入缓冲字符串中
				     sb.append("('");
				     sb.append(province);
				     sb.append("','");
				     sb.append(date);
				     sb.append("','");
				     sb.append(confirm);
				     sb.append("','");
				     sb.append(now_confirm);
				     sb.append("','");
				     sb.append(heal);
				     sb.append("','");
				     sb.append(dead);
				     //最后一条数据时判断
				     if(i<(jsonArray.size()-1))sb.append("'),");
				     else sb.append("')"); 
				}
				string=sb.toString();
				//多个数据同时插入
				sql.insert(string);

完整代码

	    int i;//用于循环所用变量
		URL url;//调用API的路径
		URLConnection conn;//建立url连接
		InputStream in;//url连接的字节流
		InputStreamReader isr;//url连接的字符流
		BufferedReader br;//用于字符流逐行读取
		String line,str,string;
		StringBuffer sb;//缓冲字符串提高效率
		JSONObject jsonObject,JO;//处理JSON字符串中的JSON对象
		JSONArray jsonArray;//处理json字符串中的json数组
		String dead="",date="",heal="",confirm="",province="",now_confirm="",city="";//对应数据中的不同键值
		SQL sql=new SQL();//调用的sql类
		
		//写入省的历史数据表
			try {
     
				path="https://wuliang.art/ncov/statistics/getProvinceHistoryList?provinceName=%E5%8F%B0%E6%B9%BE";
                //创建一个URL对象
				url=new URL(path);
				//创建一个URLConnection连接对象
				conn=url.openConnection();
				//创建一个输入流来接收网页
				in=conn.getInputStream();
				//字节流——>字符流
				isr = new InputStreamReader(in,"UTF-8");
				//从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
				br = new BufferedReader(isr);
	            line = null;
				sb=new StringBuffer();			
				while ((line=br.readLine())!=null) {
     
					sb.append(line);				
	            }
				str=sb.toString();
				//JSON解析字符串
				jsonObject=JSONObject.fromObject(str);
				jsonArray = jsonObject.getJSONArray("data");
				//缓冲字符串存储sql语句,便于多条数据同时插入
				string="insert into province(province,date,confirm,now_confirm,heal,dead) values ";
				sb=new StringBuffer();
				sb.append(string);
				//遍历JSON中的数组
				for (i=0;i<jsonArray.size();i++){
     
					//数组内数据分析
				     JO = jsonArray.getJSONObject(i);
				     date = JO.getString("date");			     
				     heal = JO.getString("heal");
				     dead = JO.getString("dead");
				     confirm = JO.getString("confirm");
				     province = JO.getString("province");
				     now_confirm = Integer.toString(Integer.parseInt(confirm)-Integer.parseInt(heal)-Integer.parseInt(dead));
				     //将字符串加入缓冲字符串中
				     sb.append("('");
				     sb.append(province);
				     sb.append("','");
				     sb.append(date);
				     sb.append("','");
				     sb.append(confirm);
				     sb.append("','");
				     sb.append(now_confirm);
				     sb.append("','");
				     sb.append(heal);
				     sb.append("','");
				     sb.append(dead);
				     //最后一条数据时判断
				     if(i<(jsonArray.size()-1))sb.append("'),");
				     else sb.append("')"); 
				}
				string=sb.toString();
				//多个数据同时插入
				sql.insert(string);		
			} catch (MalformedURLException e) {
     
				e.printStackTrace();
			} catch (IOException e) {
     
				e.printStackTrace();
			}
		
		sql.close();
}

你可能感兴趣的:(mysql,java)