API数据接口-聚合数据
xml和 json 是现今互联网中常用的两种数据交换格式,两种格式都可以进行网络数据交换,数据存储,配置文件,但由于两种文件不同的优缺点,xml主要用于配置文件,json主要应用于网络数据交换。本文通过申请聚合API数据接口,分别使用xml和json的方式解析该API数据。申请方式可以进入聚合数据官方进行申请(聚合官方)。聚合数据提供了很多的网络API接口,很方便开发者使用。
我在聚合数据申请了一个手机号码归属地查询的接口,请求示例如下图:
该接口默认返回json的格式,如果希望返回xml格式可以在请求示例中加入dtype=xml,具体如下:
(apis.juhe.cn/mobile/get?phone=13429667914&dtype=xml&key=您申请的key)
现在只要在浏览器中输入该网址,就可以获得该API接口返回的xml数据。(这是我申请的API接口请求)。返回结果如下:
返回xml格式
<root>
<resultcode>200</resultcode>
<reason>Return Successd!</reason>
<result>
<province>浙江</province>
<city>杭州</city>
<areacode>0571</areacode>
<zip>310000</zip>
<company>移动</company>
<card/>
</result>
<error_code>0</error_code>
</root>
返回json格式
{"resultcode":"200",
"reason":"Return Successd!",
"result":{
"province":"湖北",
"city":"荆州",
"areacode":"0716",
"zip":"434000",
"company":"电信",
"card":""
},
"error_code":0
}
xml解析
Dom4j 是一个用于处理 XML 的开源框架,该框架与 XPath 集成在一起,并完全支持 DOM、SAX、JAXP 和 Java 平台。接下来,使用Dom4j 解析该xml数据。解析代码如下:
public static void main(String[] args) throws IOException, DocumentException, SAXException {
String phone = "1839863";//输入手机号或手机号前7位
URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=d8da722db792a72defe63dd22f6d87f3");
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
SAXReader sr = new SAXReader();
Document read = sr.read(is);
Element rootElement = read.getRootElement();
Element resultcode = rootElement.element("resultcode");
if("200".equals(resultcode.getText())){
Element result = rootElement.element("result");
Element province = result.element("province");
Element city = result.element("city");
System.out.println("号码归属地:"+province.getText()+"省"+city.getText()+"市(区)");
}
}
json解析
json解析有四种方式,这里使用谷歌推出的Gson进行json的解析。解析代码如下:
public static void main(String[] args) throws IOException {
String phone = "1736234";
URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&key=d8da722db792a72defe63dd22f6d87f3");
URLConnection urlConnection = url.openConnection();
Reader is = new InputStreamReader(url.openStream());
Gson g = new Gson();
HashMap data = g.fromJson(is, HashMap.class);
LinkedTreeMap result = (LinkedTreeMap)data.get("result");
System.out.println("号码归属地:"+result.get("province")+"省"+result.get("city")+"市");
}