最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 編程開發 > .net教程 >
  • ASP.net教程之C#處理json實戰

  • 2019-06-18 22:52 來源:未知

昨天看到技術群中發了一個查詢天氣的api,http://www.sojson.com/open/api/weather/json.shtml?city=南昌
點進去看,發現服務器傳回來一個天氣信息的json,剛好也在學C#解析json,就干脆拿這個作為一個實例了。
首先,介紹一下Json:
Json其實就是JavaScript里面的對象和數組,通過不同的組合,可以構成許多不同的數據結構。其中使用花括號的是對象,中括號的是數組,例如:

{

"data":

    {

        "people":

        [

            {"name":"ppppp","age":18}

        ]

    }

}

這里面,data就是一個對象,而people就是一個數組。
首先前往Json官網下載對應的dll文件并應用。這里博主使用的是LitJson。
首先分析天氣查詢返回來的Json的結構。

結構和層級很明了。
上完整Json:

{
"data": {
"yesterday": {
"date": "4日星期二",
"high": "高溫 32℃",
"fx": "無持續風向",
"low": "低溫 25℃",
"fl": "微風",
"type": "多云"
},
"city": "南昌",
"aqi": "33",
"forecast": [
{
"date": "5日星期三",
"high": "高溫 34℃",
"fengli": "微風級",
"low": "低溫 27℃",
"fengxiang": "無持續風向",
"type": "多云"
},
{
"date": "6日星期四",
"high": "高溫 35℃",
"fengli": "微風級",
"low": "低溫 27℃",
"fengxiang": "無持續風向",
"type": "晴"
},
{
"date": "7日星期五",
"high": "高溫 35℃",
"fengli": "微風級",
"low": "低溫 27℃",
"fengxiang": "無持續風向",
"type": "多云"
},
{
"date": "8日星期六",
"high": "高溫 34℃",
"fengli": "微風級",
"low": "低溫 26℃",
"fengxiang": "無持續風向",
"type": "多云"
},
{
"date": "9日星期天",
"high": "高溫 33℃",
"fengli": "微風級",
"low": "低溫 27℃",
"fengxiang": "無持續風向",
"type": "多云"
}
],
"ganmao": "各項氣象條件適宜,發生感冒機率較低。但請避免長期處于空調房間中,以防感冒。",
"wendu": "32"
},
"status": 200,
"message": "OK"
}

分析之后可以知道,data,status,message屬于同一層級,而且data和yesterday屬于對象,forecast是一個數組。
LitJson中有JsonData類和JsonMapper類,其中JsonMapper類用于解析Json文本
具體使用方法如下

JsonData jsonData = JsonMapper.ToObject(Json);//這里會返回JsonData的對象

foreach(JsonData temp in jsonData)//temp中有索引器

{

    JsonData id = temp["index"]

}

在這里我們不去使用索引的方法去獲得每一個對應數據,我們使用泛型匹配。
首先需要定義數據類,類成員名必須和Json文本內相同

public class Eaxmple
{
    public string A;
    public string B;
    public int C;
    public override string ToString()//必須要重寫Tostring

    {
        return string.Format("A:{0},B:{1},C:{2}", A, B, C);
    }
}

泛型解析

string json;

Eaxmple ex= JsonMapper.ToObject<Eaxmple>(json);

Console.WriteLine(ex);

通過以上內容,我們可以對查詢天氣的api進行Json解析了。

//定義Json類,其中包含一個data對象和status,message
public class JsonContent
{
    public int status { get; set; }
    public Data data { get; set; }
    public string message { get; set; }
    public override string ToString()
    {
        return string.Format("status{0},message{1}\n{2}", status, message, data);
    }

}
//再定義Data類,
public class Data
{
    public string city { get; set; }
    public string ganmao { get; set; }
    public string wendu { get; set; }
    public List<Forecast> forecast { get; set; }//這里的數組我們用集合的方式代替
    public override string ToString()
    {
        return string.Format("{0}的天氣是:\n注意:{1}\n溫度{2}", city, ganmao, wendu);
    }
}

//最后一個Forecast類

public class Forecast
{
    public string date;
    public string high;
    public string fengxiang;
    public string low;
    public string fengli;
    public string type;

    public override string ToString()
    {
        return string.Format("日期:{0},最高氣溫:{1},最低氣溫:{2},風向:{3},風力:{4},天氣:{5}", date, high, low, fengxiang, fengli, type);
    }
}

這樣的話,每一個屬性或者字段就和json的文本對應上了,我們現在使用LitJson解析

//從指定網站獲得數據
public static string GetUrlContent(string urladdress)
{
    WebClient MyWebClient = new WebClient();
    MyWebClient.Credentials = CredentialCache.DefaultCredentials;
    Byte[] pageData = MyWebClient.DownloadData(urladdress);
    string pageHtml = Encoding.UTF8.GetString(pageData);
    return pageHtml;
}

static void Main(string[] args)
{
    Console.Write("要查詢的城市:");
    string City = Console.ReadLine();
    string json = GetJson.GetUrlContent(@"http://www.sojson.com/open/api/weather/json.shtml?city=" + City);
    JsonContent jsonc = JsonMapper.ToObject<JsonContent>(json);
    Console.WriteLine(jsonc);
    foreach (var temp in jsonc.data.forecast)
    {
        Console.WriteLine(temp);
    }
    Console.Read();

}

pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
夏天卖冷饮赚钱嘛 新绝代双骄卖什么药赚钱快 陕西快乐10分选号规律 exo成员谁赚钱多 波克捕鱼达人旧版本 贵州11选5走势图即可 街机捕鱼大亨游戏机 五星独胆技巧论坛 三星彩票网址