欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

API接口调用并处理返回的json数据

程序员文章站 2024-01-03 09:20:04
...

通过调用API接口,获取需要的数据信息。API接口返回的数据为json格式。

API接口调用并处理返回的json数据API接口调用并处理返回的json数据转存失败重新上传取消API接口调用并处理返回的json数据
public class query {
	public static JSONArray result(int typeId, int page) {
		// 接口地址
		String requestUrl = "https://www.xxx.com/xxxxx";

		// params用于存储要请求的参数,我的请求参数为typeId,page
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("typeId", typeId);
		params.put("page", page);
		// 调用httpRequest方法,这个方法主要用于请求地址,并加上请求参数
		String string = httpRequest(requestUrl, params);
		// 处理返回的json数据,获取data JSONArray
		JSONArray iwanna = JSONObject.fromObject(string).getJSONArray("data");
		//处理JSONArray,取出需要的newsId与title值
		JSONArray iwanna1 = new JSONArray();		
		JSONObject row = null;  
		for (int i = 0; i < iwanna.size(); i++) {  
		 row = iwanna.getJSONObject(i);
		 JSONObject row1=new JSONObject();
		 row1.put("newsId",row.get("newsId"));
		 row1.put("title",row.get("title"));
		 iwanna1.add(row1);
		}
		return iwanna1;
	}

	public static String httpRequest(String requestUrl, Map<String, Object> params) {
		// buffer用于接受返回的字符
		StringBuffer buffer = new StringBuffer();
		try {
			// 建立URL,把请求地址给补全,其中urlencode()方法用于把params里的参数给取出来
			URL url = new URL(requestUrl + "?" + urlencode(params));
			//System.out.println(url);
			// 打开http连接
			HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
			httpUrlConn.setDoInput(true);
			httpUrlConn.setRequestMethod("GET");
			//请求头部信息,根据实际需求添加
			httpUrlConn.addRequestProperty("id", "xxx");
			httpUrlConn.addRequestProperty("secret", "xxxxx");
			httpUrlConn.connect();
			// 获取输入的参数
			InputStream inputStream = httpUrlConn.getInputStream();
			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

			// 将bufferReader的值给放到buffer里
			String str = null;
			while ((str = bufferedReader.readLine()) != null) {
				buffer.append(str);
			}
			// 关闭bufferReader和输入流
			bufferedReader.close();
			inputStreamReader.close();
			inputStream.close();
			inputStream = null;
			// 断开连接
			httpUrlConn.disconnect();

		} catch (Exception e) {
			e.printStackTrace();
		}
		// 返回字符串
		return buffer.toString();
	}

	public static String urlencode(Map<String, Object> data) {
		// 将map里的参数变成像typeId=###&page=###&的样子
		StringBuilder sb = new StringBuilder();
		for (Map.Entry i : data.entrySet()) {
			try {
				sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}

	// 测试是否有效
	public static void main(String[] args) {

		System.out.println(result(509, 4));
	}

}
API接口调用并处理返回的json数据API接口调用并处理返回的json数据转存失败重新上传取消API接口调用并处理返回的json数据

API接口返回的完整数据如下

{
    "code": 1,
    "msg": "数据返回成功!",
    "data": [
        {
            "title": "海外破产谣言四起 留给王健林的时间不多了",
            "imgList": [
                "http://cms-bucket.ws.126.net/2020/0416/9d9d0344j00q8uu3g001xc000zk00k0c.jpg"
            ],
            "source": "新财富",
            "newsId": "FAANASFF00259DLP",
            "digest": "",
            "postTime": "2020-04-16 07:31:52",
            "videoList": null
        },
        {
            "title": "4月多地出台楼市调控政策 刚需释放房企销售\"回温\"",
            "imgList": [
                "http://cms-bucket.ws.126.net/2020/0416/332d09fcp00q8uu8j0056c0009c005uc.png"
            ],
            "source": "中国网财经",
            "newsId": "FAAQ2DQK00259DLP",
            "digest": "",
            "postTime": "2020-04-16 08:19:40",
            "videoList": null
        },
        {
            "title": "财经派云对话|张玮:疫情是否会加重逆全球化?",
            "imgList": [
                "http://cms-bucket.ws.126.net/2020/0416/03c6931cj00q8uvfa009zc000s600e3c.jpg"
            ],
            "source": "",
            "newsId": "221127",
            "digest": null,
            "postTime": "2020-04-16 08:37:08",
            "videoList": null
        },
        {
            "title": "南财早新闻丨最新房价数据今日公布;欧美股市全线收跌,美油跌跌不休创18年新低",
            "imgList": [
                "http://cms-bucket.ws.126.net/2020/0416/10cb86f2j00q8urz8000hc000a8006dc.jpg"
            ],
            "source": "21世纪经济报道",
            "newsId": "FAAN83HM05199NPP",
            "digest": "",
            "postTime": "2020-04-16 07:30:34",
            "videoList": null
        },
        {
            "title": "高盛、美国银行、花旗等一季度利润跌超40%",
            "imgList": null,
            "source": "金融界",
            "newsId": "FAAL9OM40519QIKK",
            "digest": "",
            "postTime": "2020-04-16 06:56:17",
            "videoList": null
        },
        {
            "title": "华为紧盯汽车:HiCar今年落地 野心不止车联网",
            "imgList": [
                "http://cms-bucket.ws.126.net/2020/0416/ca71a10ep00q8utne00xtc001hc00zkc.png"
            ],
            "source": "每日经济新闻",
            "newsId": "FAAPB3S800258105",
            "digest": "",
            "postTime": "2020-04-16 08:06:56",
            "videoList": null
        },
        {
            "title": "诺诚健华-B(09969)超额配股权获悉数行使 涉及3754.8万股",
            "imgList": null,
            "source": "智通财经网",
            "newsId": "FAAJOFT405198UNI",
            "digest": "",
            "postTime": "2020-04-16 06:29:23",
            "videoList": null
        }
    ]
}
API接口调用并处理返回的json数据API接口调用并处理返回的json数据转存失败重新上传取消API接口调用并处理返回的json数据

运行后,获得的数据为

[
        {
            "title": "海外破产谣言四起 留给王健林的时间不多了",
            "newsId": "FAANASFF00259DLP",
        },
        {
            "title": "4月多地出台楼市调控政策 刚需释放房企销售\"回温\"",
            "newsId": "FAAQ2DQK00259DLP",
        },
        {
            "title": "财经派云对话|张玮:疫情是否会加重逆全球化?",
            "newsId": "221127",
        },
        {
            "title": "南财早新闻丨最新房价数据今日公布;欧美股市全线收跌,美油跌跌不休创18年新低",
            "newsId": "FAAN83HM05199NPP",
        },
        {
            "title": "高盛、美国银行、花旗等一季度利润跌超40%",
            "newsId": "FAAL9OM40519QIKK",
        },
        {
            "title": "华为紧盯汽车:HiCar今年落地 野心不止车联网",
            "newsId": "FAAPB3S800258105",
        },
        {
            "title": "诺诚健华-B(09969)超额配股权获悉数行使 涉及3754.8万股",
            "newsId": "FAAJOFT405198UNI",
        }
    ]
API接口调用并处理返回的json数据API接口调用并处理返回的json数据转存失败重新上传取消API接口调用并处理返回的json数据

后续,通过newsId参数,调用另一个API接口,获取详细信息。

public class news {
	
	//获取新闻详细内容	
public static String detail(int typeId, int page) {
	//调用query,获取newsId
	JSONArray newsid=query.result(typeId,page);
	//循环获取到的newsId,得到新闻的详细内容
	for (int i = 0; i < newsid.size(); i++) {	
		JSONObject row = null; 
		 row = newsid.getJSONObject(i);
		System.out.println((String) row.get("title"));
		//调用details方法,获取
		System.out.println(details((String) row.get("newsId")));
		System.out.println("----------------------");
	}
	return "success";
	}

	public static String details(String newsId) {
		// 接口地址
		String requestUrl = "https://www.xxx.com/xxxxx";
		//与前部分接口调用相同
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("newsId", newsId);
		String news = query.httpRequest(requestUrl,params);
		// 判断接口调用是否成功
		JSONObject judge = JSONObject.fromObject(news);
		//code=0接口调用失败
		if(judge.getInt("code")==0) {
			return judge.getString("msg");
		}
		//code=1接口调用成功
		if(judge.getInt("code")==1) {
		//处理返回的json数据并处理
		JSONObject iwanna = JSONObject.fromObject(news).getJSONObject("data");
		return iwanna.getString("content");
	}
		return "success";
	}
	public static void main(String[] args){
		
		System.out.println(detail(509,1));

	}
}
API接口调用并处理返回的json数据API接口调用并处理返回的json数据转存失败重新上传取消API接口调用并处理返回的json数据

运行,得到结果。API接口调用并处理返回的json数据API接口调用并处理返回的json数据API接口调用并处理返回的json数据转存失败重新上传取消API接口调用并处理返回的json数据

 至此,调用结束。获取到需要的数据。

相关标签: api java

上一篇:

下一篇: