API接口调用并处理返回的json数据
程序员文章站
2024-01-03 09:20:04
...
通过调用API接口,获取需要的数据信息。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接口返回的完整数据如下
{
"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
}
]
}
转存失败重新上传取消
运行后,获得的数据为
[
{
"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",
}
]
转存失败重新上传取消
后续,通过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数据
-
ajax根据ID查询数据库并返回Json格式数据返回js,使用append显示到页面。判断json值为[]或者[[]]的问题。
-
接口返回数据Json格式处理
-
dragon boat festival php实现post接口 接收android客户端json数据 存储数据库 并返回json
-
ajax处理返回的json格式数据方法
-
解决vue中使用Axios调用接口时出现的ie数据处理问题
-
java读取其他服务接口返回的json数据示例代码
-
thinkPHP5实现的查询数据库并返回json数据实例
-
Jquery 使用Ajax获取后台返回的Json数据后,页面处理
-
快速解决处理后台返回json数据格式的问题