国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#請求訪問HTTP+JSON數(shù)據(jù)的解析

這篇具有很好參考價(jià)值的文章主要介紹了C#請求訪問HTTP+JSON數(shù)據(jù)的解析。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言

最近工作客戶需要一個(gè)HTTP的Mes需求,所以自己去學(xué)習(xí)了C#請求HTTP的方法以及JSON數(shù)據(jù)的解析方法,總結(jié)出了點(diǎn)經(jīng)驗(yàn),以便后續(xù)自己找起來方便一點(diǎn),故在此寫一篇文章。

二、準(zhǔn)備工作

下面我用一個(gè)聚合數(shù)據(jù)提供的天氣預(yù)報(bào)API接口來闡述請求HTTP和JSON數(shù)據(jù)解析的功能;

先看API文檔這么訪問數(shù)據(jù)的

c# http json,C#,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

?可以看到需要的東西有請求地址、請求參數(shù)、請求方式、內(nèi)容類型,其中請求參數(shù)要有查詢城市的代碼和Key,Key就是個(gè)人賬戶請求訪問數(shù)據(jù)的密鑰,這個(gè)接口是免費(fèi)的,所以有需求的直接申請就行啦。

下面是代碼實(shí)例,需要添加的命名空間

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

三、開始干活

?請求示例

    //請求地址
    string URl = "http://apis.juhe.cn/simpleWeather/query";
    //請求參數(shù)
    string Key = "630abb8f3ecec761c7e88738a2353d";//這個(gè)是我的密鑰(不完整)用自己的密鑰
    string City = "%E5%B9%BF%E5%B7%9E";             //城市代碼-廣州的

            
    //請求服務(wù)器
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URl);  //請求地址
    string strdata = "city=" + City + "&" + "key=" + Key;               //請求參數(shù)  
    myRequest.Method = "POST";                                          //請求方式             
    myRequest.ContentType = "application/x-www-form-urlencoded";        //請求內(nèi)容類型

    //發(fā)送
    StreamWriter sw = new StreamWriter(myRequest.GetRequestStream());
    sw.Write(strdata);
    sw.Close();

接收數(shù)據(jù)

上面就是訪問數(shù)據(jù)的方法,下面是接收服務(wù)器返回來數(shù)據(jù)的方法

//響應(yīng)結(jié)果
string strWebData = string.Empty;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
strWebData = reader.ReadToEnd();//返回來的所以數(shù)據(jù)
Console.WriteLine(strWebData);

這個(gè)是打印出來返回來的數(shù)據(jù)?

{"reason":"查詢成功!","result":{"city":"廣州","realtime":{"temperature":"25","humidity":"29","info":"晴","wid":"00","direct":"東北風(fēng)","power":"2級","aqi":"60"},"future":[{"date":"2023-03-05","temperature":"11\/26℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"持續(xù)無風(fēng)向"},{"date":"2023-03-06","temperature":"11\/26℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"持續(xù)無風(fēng)向"},{"date":"2023-03-07","temperature":"14\/26℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"持續(xù)無風(fēng)向"},{"date":"2023-03-08","temperature":"15\/26℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"持續(xù)無風(fēng)向"},{"date":"2023-03-09","temperature":"16\/27℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"持續(xù)無風(fēng)向"}]},"error_code":0}

下面這個(gè)json格式數(shù)據(jù)的結(jié)構(gòu)看起來更直觀一點(diǎn)?

{
    "reason": "查詢成功!",
    "result": {
        "city": "廣州",
        "realtime": {
            "temperature": "25",
            "humidity": "29",
            "info": "晴",
            "wid": "00",
            "direct": "東北風(fēng)",
            "power": "2級",
            "aqi": "60"
        },
        "future": [
            {
                "date": "2023-03-05",
                "temperature": "11/26℃",
                "weather": "晴",
                "wid": {
                    "day": "00",
                    "night": "00"
                },
                "direct": "持續(xù)無風(fēng)向"
            },
            {
                "date": "2023-03-06",
                "temperature": "11/26℃",
                "weather": "晴",
                "wid": {
                    "day": "00",
                    "night": "00"
                },
                "direct": "持續(xù)無風(fēng)向"
            },
            {
                "date": "2023-03-07",
                "temperature": "14/26℃",
                "weather": "晴",
                "wid": {
                    "day": "00",
                    "night": "00"
                },
                "direct": "持續(xù)無風(fēng)向"
            },
            {
                "date": "2023-03-08",
                "temperature": "15/26℃",
                "weather": "多云",
                "wid": {
                    "day": "01",
                    "night": "01"
                },
                "direct": "持續(xù)無風(fēng)向"
            },
            {
                "date": "2023-03-09",
                "temperature": "16/27℃",
                "weather": "多云",
                "wid": {
                    "day": "01",
                    "night": "01"
                },
                "direct": "持續(xù)無風(fēng)向"
            }
        ]
    },
    "error_code": 0
}

四、解析數(shù)據(jù)

一層數(shù)據(jù)解析?

我們先小試牛刀將 reason 中的 查詢成功! 解析出來先

JObject obj = (JObject)JsonConvert.DeserializeObject(strWebData);//將剛才一大串字符串轉(zhuǎn)換成一個(gè)大對象
 string reason = obj["reason"].ToString();
 Console.WriteLine(reason);

看一下打印的效果,可以成功將數(shù)據(jù)解析出來了

查詢成功!

?多層嵌套數(shù)據(jù)解析

我們嘗試將realtime里面的temperature數(shù)據(jù)解析下來看看,我們可以看到realtime的數(shù)據(jù)還是是保函在result里面的。直接暴力取,直搗黃龍,代碼如下

JObject obj = (JObject)JsonConvert.DeserializeObject(strWebData);//將剛才一大串字符串轉(zhuǎn)換成一個(gè)大對象
string reason = obj["reason"].ToString();
Console.WriteLine("reason = " + reason);
string temperature = obj["result"]["realtime"]["temperature"].ToString();
Console.WriteLine("temperature = " + temperature);

可以看一下打印的效果

reason = 查詢成功!
temperature = 25

?

但是有時(shí)候我們需要未來的天氣情況怎么辦,未來的天氣數(shù)據(jù)存在一個(gè)叫future的數(shù)組當(dāng)中,而且數(shù)組中的每個(gè)元素都是一個(gè)對象,這可怎么辦,技能升級》》》》

解析JSON里面的數(shù)組

下面就是一個(gè)表演的時(shí)間啦,獲取一下未來的日期為例

string strfuture = obj["result"]["future"].ToString();
//轉(zhuǎn)換成JArray格式
JArray jsonArr = (JArray)JsonConvert.DeserializeObject(strfuture);           
JObject[] DataObj = new JObject[jsonArr.Count];//這兩種方法是一樣的效果
List<JObject> futureobj = new List<JObject>();//這兩種方法是一樣的效果

//將數(shù)組的每一個(gè)成員轉(zhuǎn)換成JObject格式,并存起來
for (int i = 0; i < jsonArr.Count; i++)
{
    futureobj.Add((JObject)jsonArr[i]);//使用其中一種方法就行了
    DataObj[i] = (JObject)jsonArr[i];//使用其中一種方法就行了
}

//打印一下未來5天的日期,每個(gè)數(shù)組成員都是一個(gè)對象,用下標(biāo)取引用對象
for(int i = 0; i < DataObj.Length; i++)
{
    string date = DataObj[i]["date"].ToString();
    Console.WriteLine(date);
}

打印效果如下,這樣我們就已經(jīng)結(jié)束了?

2023-03-05
2023-03-06
2023-03-07
2023-03-08
2023-03-09

最后JSON反序列化方法 和 JSON序列化方法如下

//反序列化json
JObject obj = (JObject)JsonConvert.DeserializeObject(strWebData);

//序列化json  p是一個(gè)對象類 將對象P序列化成一個(gè)json字符串
string output = JsonConvert.SerializeObject(p);

其實(shí)很多知識都要反復(fù)去練習(xí)鞏固才能成為自己的技能,共勉?。?!

下一篇:對象序列化成json數(shù)據(jù)格式文章來源地址http://www.zghlxwxcb.cn/news/detail-656262.html

到了這里,關(guān)于C#請求訪問HTTP+JSON數(shù)據(jù)的解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C#使用HTTP發(fā)送POST Params傳參值為Json字符串解決

    C#使用HTTP發(fā)送POST Params傳參值為Json字符串解決

    Post:方法 ? ? ? ? public static string Post(string url, Dictionarystring, string dic) ? ? ? ? { ? ? ? ? ? ? string tempMessage = \\\"\\\"; ? ? ? ? ? ? System.Net.WebClient WebClientObj = new System.Net.WebClient(); ? ? ? ? ? ? System.Collections.Specialized.NameValueCollection PostVars = new System.Collections.Specialized.NameValueCol

    2024年02月06日
    瀏覽(21)
  • 解析HTTP響應(yīng)的JSON數(shù)據(jù)

    解析HTTP響應(yīng)的JSON數(shù)據(jù)

    解析HTTP響應(yīng)的JSON數(shù)據(jù)是許多Web開發(fā)任務(wù)中的常見需求。在Go語言中,可以使用標(biāo)準(zhǔn)庫中的 encoding/json 包來輕松解析JSON數(shù)據(jù)。下面我將詳細(xì)介紹如何解析HTTP響應(yīng)的JSON數(shù)據(jù)。 首先,確保你已經(jīng)發(fā)送了一個(gè)HTTP請求并獲取到了響應(yīng)。然后,你可以按照以下步驟解析JSON數(shù)據(jù): 讀取

    2024年01月18日
    瀏覽(23)
  • 【Unity】C# 創(chuàng)建/讀取/解析JSON數(shù)據(jù)

    判斷是否存在JSON數(shù)據(jù)文件沒有則創(chuàng)建并保存

    2024年02月16日
    瀏覽(18)
  • java http get post 和 發(fā)送json數(shù)據(jù)請求

    java http get post 和 發(fā)送json數(shù)據(jù)請求

    瀏覽器請求效果 ? ? ? main調(diào)用 ?

    2024年02月16日
    瀏覽(32)
  • Qt 使用HTTP請求網(wǎng)絡(luò)API并接收返回的JSON格式的數(shù)據(jù)

    引入網(wǎng)絡(luò)模塊: mainwindow.h: mainwindow.cpp:

    2024年02月13日
    瀏覽(19)
  • 【Unity 3D】C#從JSON文件中讀取、解析、保存數(shù)據(jù)(附源碼)

    JSON是一種輕量級的數(shù)據(jù)交換格式,采用完全獨(dú)立于編程語言的文本格式存儲和表示數(shù)據(jù),簡潔和清晰的層次結(jié)構(gòu)使JSON成為理想的數(shù)據(jù)交換語言,易于讀者閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效的提高網(wǎng)絡(luò)傳輸效率 生成JSON數(shù)據(jù)實(shí)例代碼如下 下面的代碼將JSON中數(shù)據(jù)

    2024年02月11日
    瀏覽(160)
  • 深入理解HTTP請求中常見的數(shù)據(jù)類型包括表單數(shù)據(jù)、JSON、XML和文件上傳等。

    本文將介紹HTTP請求中常見的數(shù)據(jù)類型,包括表單數(shù)據(jù)、JSON、XML和文件上傳等。通過詳細(xì)解釋每種數(shù)據(jù)類型的特點(diǎn)、用途和示例,幫助讀者深入理解并正確使用這些常見的HTTP數(shù)據(jù)類型。 在Web開發(fā)中,HTTP是一種常用的通信協(xié)議,用于客戶端和服務(wù)器之間的數(shù)據(jù)交互。HTTP請求中

    2024年02月10日
    瀏覽(31)
  • PLC從HTTP服務(wù)端獲取JSON文件,解析數(shù)據(jù)到寄存器

    PLC從HTTP服務(wù)端獲取JSON文件,解析數(shù)據(jù)到寄存器

    ? ? ? ?智能網(wǎng)關(guān)IGT-DSER集成了多種PLC協(xié)議,方便實(shí)現(xiàn)各種PLC與HTTP服務(wù)端之間通訊。通過網(wǎng)關(guān)的參數(shù)配置軟件綁定JSON文件的字段與PLC寄存器地址,配置URL,即可采用POST命令,將JSON文件提交給HTTP的服務(wù)端; 服務(wù)端有返回的JSON,或者GET命令獲取到的JSON,網(wǎng)關(guān)進(jìn)行解析后將數(shù)據(jù)

    2024年01月23日
    瀏覽(20)
  • 【Jmeter】信息頭管理器(HTTP Header Manager) - 發(fā)送Post請求數(shù)據(jù)為json格式

    【Jmeter】信息頭管理器(HTTP Header Manager) - 發(fā)送Post請求數(shù)據(jù)為json格式

    將 json 格式 請求數(shù)據(jù)輸入 HTTP 請求 中的 Body Data (消息體數(shù)據(jù) / 請求入?yún)? 右擊 Thread (線程組) 鼠標(biāo)移至 Add (添加) → Config Element (配置元件) 點(diǎn)擊 HTTP Header Manager (HTTP信息頭管理器) 即可完成信息頭管理器新建 進(jìn)入 HTTP Header Manager (HTTP信息頭管理器) 頁面 點(diǎn)擊下方 Add (添加) Nam

    2024年02月07日
    瀏覽(18)
  • C# Newtonsoft.Json解析json到自定義實(shí)體類

    使用Newtonsoft.Json解析json到自定義實(shí)體類也很方便,關(guān)鍵點(diǎn)在于實(shí)體類定義屬性的時(shí)候加上JsonProperty標(biāo)簽。最簡單的一種形式可以形如這樣: JsonProperty后面括弧里的字串即代表json中對應(yīng)的屬性名稱。通過這種方式即可關(guān)聯(lián)json屬性和實(shí)體類屬性。 調(diào)用的時(shí)候也很簡單, 這樣就

    2024年02月20日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包