C#实现中国天气网JSON接口测试
接上一篇,经过反复的查看,最终从这篇文章中找到了一个可用的JSON接口,于是研究了一下中国天气网JSON接口的测试:
和上一篇XML接口测试的原理是一样的,只是需要安装一下Newtonsoft.Json:
这个就是传说中的JSON.Net!在项目右键点击“管理NuGet程序包”中搜索json.net然后安装即可,等到项目的引用中出现这个东西的时候就可以在程序里using Newtonsoft.Json了。
还是老套路,不管有用没用,先把接口返回的JSON内容保存到本地一份。这里为了查看方便我直接在控制台打印出来了,方便查看JSON的结构并加以分析:
通过JSON.Net对字符串进行反序列化(也可以强转),然后对内容加以分析即可,至于想测试,一般是比较值。这里就做一次遍历,不做比较了。代码如下:
using System;
using System.Text;
using Newtonsoft.Json;
using System.Net;
using System.IO;
using Newtonsoft.Json.Linq; namespace JsonInterfaceTest
{
class Program
{
static void Main(string[] args)
{
test();
} private static void test(int interfaceNumber)
{
string url = "http://www.weather.com.cn/adat/cityinfo/" + interfaceNumber + ".html";
string localContent = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\test.txt";
try
{
WebClient MyWebClient = new WebClient();
Byte[] pageData = MyWebClient.DownloadData(url);
string pageHtml = Encoding.UTF8.GetString(pageData);
using (StreamWriter sw = new StreamWriter(localContent))
{
sw.WriteLine(pageHtml);
}
//JObject jObj = JObject.Parse(pageHtml);
JObject jObj = JsonConvert.DeserializeObject(pageHtml) as JObject;
Console.WriteLine(jObj.ToString());
ReadJson(jObj);
Console.ReadLine();
}
catch (WebException webEx)
{
Console.WriteLine(webEx.Message.ToString());
}
} private static void ReadJson(JObject jObj)
{
foreach (var o in jObj)
{
Console.Write(o.Key+":");
if (o.Value is JObject)
{
Console.WriteLine();
ReadJson(JsonConvert.DeserializeObject(o.Value.ToString()) as JObject);
}
else
{
Console.WriteLine(o.Value);
}
}
}
}
}
换汤不换药,稍微改一下上面的接口测试程序就可以通过快递接口查快递了(通过快递公司代号和快递单号):
using System;
using System.Text;
using Newtonsoft.Json;
using System.Net;
using System.IO;
using Newtonsoft.Json.Linq; namespace JsonInterfaceTest
{
class Program
{
static void Main(string[] args)
{
test("zhongtong", );
Console.Read();
} private static void test(string a, long b)
{
string url = "http://www.kuaidi100.com/query?type=" + a + "&postid=" + b;
string localContent = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\test.txt";
try
{
WebClient MyWebClient = new WebClient();
Byte[] pageData = MyWebClient.DownloadData(url);
string pageHtml = Encoding.UTF8.GetString(pageData);
using (StreamWriter sw = new StreamWriter(localContent))
{
sw.WriteLine(pageHtml);
}
JObject jObj = JObject.Parse(pageHtml);
//JObject jObj = JsonConvert.DeserializeObject(pageHtml) as JObject;
Console.WriteLine(jObj.ToString());
ReadJson(jObj);
Console.ReadLine();
}
catch (WebException webEx)
{
Console.WriteLine(webEx.Message.ToString());
}
} private static void ReadJson(JObject jObj)
{
foreach (var o in jObj)
{
Console.Write(o.Key + ":");
if (o.Value is JObject)
{
Console.WriteLine();
ReadJson(JsonConvert.DeserializeObject(o.Value.ToString()) as JObject);
}
else
{
Console.WriteLine(o.Value);
}
}
}
}
}
其实用PowerShell脚本来完成这个测试是更加方便的!微软给我们提供了很方便的“ConvertFrom-Json”这一cmdlet来实现我们对Json对象的交互!代码如下:
function test()
{
param($interfaceNumber)
$url = "http://www.weather.com.cn/adat/cityinfo/" + $interfaceNumber + ".html";
$jsonObject = Invoke-WebRequest -Uri $url | %{$_.Content} | ConvertFrom-Json
if($jsonObject.weatherinfo.img1 -eq "d1.gif"){Write-Host "Test pass!" -ForegroundColor Green}
}
test -interfaceNumber 101010100
调用脚本执行效果如下:
C#实现中国天气网JSON接口测试的更多相关文章
- C#实现中国天气网XML接口测试
点击链接查看中国天气网接口说明,最近想研究一下接口测试,源于最近一次和某公司的技术总监(交大校友)谈话,发现接口测试的需求是比较大的,于是想要研究一下. 好不容易在网上找到了一个关于中国天气网的接口说 ...
- 中国天气网 JSON接口的城市编码解析及结果
最近在弄一个Android应用,其中一个功能是天气情况展示,准备使用google的天气API服务(http://www.google.com/ig/api?hl=zh-cn&weather=, ...
- Android解析中国天气网的Json数据
在Android开发中.一般的APP都是通过获取server端的数据来更新UI.从server获取到的数据能够是Json.它的数据量要比XML要小,这里解析中国天气网上获取的数据,尽管已经不再更新了. ...
- 第十二、模块二、调用中国天气网和qqOnline及TrainTimeWebService接口来突出Json方法
一. 浏览网页的时候,发送的请求.服务器反回来的永远是字符串,由于服务器后台使用的语言不通,所以就需要用工具反解,这里用到了json json方法一 json.loads()将字符串转化为python ...
- a中国天气网pi(json格式)
http://m.weather.com.cn/data/101050101.html 此接口的回报格式例如以下 { "weatherinfo": { "city&quo ...
- [转载]中国天气网API
最近在做个网站要用到天气网的api,在网上找了些参考资料,这篇文章对天气网api的介绍比较详细,所以转载之,谢谢原作者的辛勤劳动和奉献精神. 原文地址:http://g.kehou.com/t1033 ...
- 中国天气网API
中国天气网有三个 API 适用于不同场合的使用. http://m.weather.com.cn/data/101050101.html 这个接口返回的格式如下. { "weatherinf ...
- Android解析中国天气接口JSon数据,应用于天气查询!
android解析Json数据是比较常见的一种操作.也是客户端和服务器进行数据交互的桥梁.下面就来看一看在android中解析JSon数据的方法吧. 首先要想获得Json数据,就必须访问相关的网络接口 ...
- 爬虫-通过本地IP地址从中国天气网爬取当前城市天气情况
1.问题描述 最近在做一个pyqt登录校园网的小项目,想在窗口的状态栏加上当天的天气情况,用爬虫可以很好的解决我的问题. 2.解决思路 考虑到所处位置的不同,需要先获取本地城市地址,然后作为中 ...
随机推荐
- IOS Certificates 制作流程 (Adobe FlashBuilder)
看到一个Adobe 官方的PDF 说的非常明白,比自己一步一步总结的要好多了 怎么生成 以及为何生成都有说明 http://help.adobe.com/en_US/ppcompdoc/Adobe_P ...
- 转:Jmeter之Bean shell使用(二)
上一篇Jmeter之Bean shell使用(一)简单介绍了下Jmeter中的Bean shell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求.本节内容如 ...
- UVa 10088 - Trees on My Island (pick定理)
样例: 输入:123 16 39 28 49 69 98 96 55 84 43 51 3121000 10002000 10004000 20006000 10008000 30008000 800 ...
- have you declared this activity in your AndroidManifest.xml
对于那些刚开始接触安卓的开发者来说,遇到这个问题再正常不过了,出现这种问题的原因大概可分为: 1.android的四大组件都必须在AndroidMainifest.xml里面声明,所以首先看看有没有在 ...
- bzoj 4237稻草人
按x轴进行分治,将[l,r]分成[l,mid]和[mid+1,r],左下角点x值在[l,mid]中,右上角点x值在[mid+1,r],然后将[l,r]中的所有点按y轴排序,按顺序扫描,若扫描到左下角点 ...
- WebView自适应屏幕大小
webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); ...
- 当执行php脚本时用户关闭浏览器会发生什么?
2008年8月16日 1,152 views 发表评论 阅读评论 如果一段php脚本执行插入数据到mysql的操作. 一般情况下,由于php脚本在服务器上执行,此时用户虽然关闭了浏览器,但是服务器端的 ...
- 存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。刷新 ObjectStateManager 项。
在用asp.net MVC3 的MusicStore时候 Edit某个数据项时提示下面的错误: 存储区更新.插入或删除语句影响到了意外的行数(0).实体在加载后可能被修改或删除.刷新 ObjectSt ...
- 夺命雷公狗---DEDECMS----3快速入门之隐藏
如果我们在工作的时候遇到上操蛋的老板,本来公司是做医疗器械的,但是老板突然老了句我们不做医疗了,我们该做电影网,那么我们可以先将原本的栏目进行修改成隐藏栏目, 主要是预防变态老板突然来句“电影网更不好 ...
- Power Gating的设计(架构)
switching network的层次: 一般选择flatted的形式,hierarchy的结构对voltage drop和performance delay有影响. Power network的结 ...