C#实现中国天气网JSON接口测试

简介: 接上一篇,经过反复的查看,最终从这篇文章中找到了一个可用的JSON接口,于是研究了一下中国天气网JSON接口的测试: 和上一篇XML接口测试的原理是一样的,只是需要安装一下Newtonsoft.Json: 这个就是传说中的JSON.Net!在项目右键点击“管理NuGet程序包”中搜索json.net然后安装即可,等到项目的引用中出现这个东西的时候就可以在程序里using Newtonsoft.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(101010100);
        }

        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", 368583049476);
            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

调用脚本执行效果如下:

相关文章
|
7月前
|
数据采集 JSON API
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
|
2天前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
28 0
|
2天前
|
JSON C# 数据格式
C# 处理gzip格式的json
C# 处理gzip格式的json
22 0
|
2天前
|
存储 JSON C#
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
85 0
|
2天前
|
XML 存储 JSON
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。 本文将使用开源库**ApeFree.DataStore**来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。 ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
71 0
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
|
2天前
|
XML 存储 JSON
C# | 使用Json序列化对象时忽略只读的属性
将对象序列化成为Json字符串是一个使用频率非常高的功能。Json格式具有很高的可读性,同时相较于XML更节省空间。 在开发过程中经常会遇到需要保存配置的场景,比如将配置信息保存在配置类型的实例中,再将这个对象序列化成为Json字符串并保存。当需要加载配置时,则是读取Json格式的字符串再将其还原成配置对象。在序列化的过程中,默认会将所有公开的属性和字段都序列化进入Json字符串中,这其中也会包含只读的属性或字段,而只读的属性和字段在反序列化的过程中其实是无意义的,也就是说这一部分存储是多余的。 本文将讲解如何在执行Json序列化时,忽略掉那些只读的属性和字段。
63 0
C# | 使用Json序列化对象时忽略只读的属性
|
2天前
|
XML 存储 JSON
C# | JSON格式与XML格式互相转换
JSON格式与XML格式是目前互联网上使用最为广泛的数据交换格式之一,而两种格式各自有着自己的特点和优势。 在实际开发中,我们经常需要将数据在不同的系统或模块之间进行传递和转换,而JSON格式和XML格式的互相转换是一项非常基础和必要的技能。 同时,对于需要将数据存储在不同的介质中的应用场景,比如在移动端本地存储数据,或者在服务器端将数据保存到文件或数据库中,也需要将JSON或XML格式进行相应的转换。 因此,熟练掌握JSON与XML格式互相转换的方法对于开发人员来说是非常重要的。在本文中,我们将介绍常用的JSON和XML互相转换的方法及其实现。
60 0
C# | JSON格式与XML格式互相转换
|
2天前
|
XML 存储 JSON
C# | DataGridView数据转存为Json、XML格式
DataGridView是常用的数据展示组件,而将其转存为Json或XML格式,则可以方便地进行数据的传输和存储。 Json格式具有轻量、易读、易解析等优点,广泛应用于Web开发、API接口传输等场景。 XML格式则具有良好的结构化特性,支持命名空间、数据类型等复杂数据表示方式,被广泛应用于数据交换、配置文件等领域。 因此,将DataGridView数据转存为Json、XML格式,不仅能够方便地进行数据的传输和存储,还能够满足不同场景下的数据需求。 本篇文章将介绍如何将DataGridView数据转存为Json、XML格式,并提供相应的代码示例。
112 0
C# | DataGridView数据转存为Json、XML格式
|
2天前
|
JSON C# 数据格式
C# | 使用DataGridView展示JSON数组
你想展示一个复杂的JSON数组数据吗?但是你却不知道该如何展示它,是吗?没问题,因为本文就是为解决这个问题而生的!使用DataGridView轻松地将JSON数组数据以表格的形式呈现出来,这样你就可以更加清晰地了解和处理数据了。 让我们一起来探索如何实现吧!
82 0
C# | 使用DataGridView展示JSON数组
|
5月前
|
数据采集 JSON JavaScript
C# 解析“JSON“格式数据和网络实战案例 入门
C# 解析“JSON“格式数据和网络实战案例 入门

热门文章

最新文章