C#解析JSON

https://blog.csdn.net/weixin_43046974/article/details/131449900

C#解析JSON
  • 1. JSON定義
  • 2. JSON一般構成及解析方法
  • 3. 解析舉例子
    • 1. JSON對象解析,只包含一層對象{}
    • 2. 嵌套JSON對象解析,包含多層對象{}
    • 3. JSON數組解析1(數組循環遍歷)
    • 4. JSON數組解析2(使用index獲取數據,index從0開始計算)
    • 5. JSON 對象中的數組,一層對象{}中包含數組[]
    • 6. 嵌套 JSON 對象中的數組,多層對象{}包含數組[]

1. JSON定義

全稱“JavaScript Object Notation(JavaScript對象表示法)”,JSON 是存儲和交換文本信息的語法。

舉例:

[{"id": 2,"name": "星河爆破","number": 999},{"id": 3,"name": "九星連珠","number": 9},{"id": 4,"name": "一語成讖","number": 999}
]

學習JSON基礎教程:學習JSON基礎教程
在線JSON解析及格式化驗證網站:在線JSON解析及格式化驗證網站

2. JSON一般構成及解析方法

JSON序列化與反序列化

JSON序列化:將對象轉換成JSON 字符串
JSON反序列化:將JSON 字符串轉換成對象

JSON結構(2種)
(1)對象結構:{}

{key1:value1,key2:value2...}
key的數據類型:字符串value的數據類型:字符串、數值、null、json數組[]、json對象{}

(2)數組結構:[]

JSON數組結構:[value1,value2......]
value的數據類型:字符串、數值、null、json數組[]、json對象{}

C#代碼解析JSON
可使用Visual Studio調試代碼,使用C#中的Newtonsoft庫來解析JSON,添加引用

using Newtonsoft.Json
using Newtonsoft.Json.Linq

解析規則(重要)

針對對象結構{},使用JObject解析
針對數組結構[],使用JArray解析

3. 解析舉例子

1. JSON對象解析,只包含一層對象{}

JSON文本:

{"name":"張三","name_en":"zhangssan"
}

解析代碼如下:

string jsonText = "{\"name\":\"張三\",\"name_en\":\"zhangssan\"}";
//解析對象JObject 
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
//獲取此對象key="name"和key="name_en"的值
string zone = jo["name"].ToString();
string zone_en = jo["name_en"].ToString();
Console.WriteLine(zone);
Console.WriteLine(zone_en);

2. 嵌套JSON對象解析,包含多層對象{}

JSON文本:

{"allname":{"name":"張三","name_en":"zhangsan"}
}

解析代碼如下:

string jsonText = "{\"allname\":{\"name\":\"張三\",\"name_en\":\"zhangsan\"}}";
//解析對象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
//獲取此對象中key="allname"下key="name"的值
string zone = jo["allname"]["name"].ToString();
string zone_en = jo["allname"]["name_en"].ToString();
Console.WriteLine(zone);
Console.WriteLine(zone_en);

3. JSON數組解析1(數組循環遍歷)

JSON文本:

[{"a":"a1","b":"b1"},{"a":"a2","b":"b2"}
]

解析代碼如下:

string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; 
//解析數組JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//循環獲取數組中的內容
for(int i = 0; i < jArray.Count; i++)
{//解析對象JObjectJObject j = JObject.Parse(jArray[i].ToString());//獲取此對象key="a"的值string a = j["a"].ToString();Console.WriteLine(a);
}

4. JSON數組解析2(使用index獲取數據,index從0開始計算)

JSON文本:

[{"a":"a1","b":"b1"},{"a":"a2","b":"b2"}
]

解析代碼如下:

string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]";   
//解析數組JArray           
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//獲取數組jArray中第1個(從第0開始計算)key="a"的值
string str = jArray[1]["a"].ToString();
Console.WriteLine(str);

5. JSON 對象中的數組,一層對象{}中包含數組[]

JSON文本:

{"name":"網站","num":3,"sites":["Google","Runoob","Taobao"]
}

解析代碼如下:

string jsonText = "{\"name\":\"網站\",  \"num\":3,  \"sites\":[\"Google\",\"Runoob\",\"Taobao\"]}";
//解析對象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析數組JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//獲取數組sites jArray中第0個(從第0開始計算)的值
string sitesdetails = jArray[0].ToString();
Console.WriteLine(sitesdetails);

6. 嵌套 JSON 對象中的數組,多層對象{}包含數組[]

JSON文本:

{"name":"網站","num":2,"sites": [{ "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻譯" ] },{ "name":"Taobao", "info":[ "淘寶", "網購" ] }]
}

解析代碼如下:

string jsonText = "{\"name\":\"網站\",\"num\":2,\"sites\":[{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻譯\"]},{\"name\":\"Taobao\",\"info\":[\"淘寶\",\"網購\"]}]}";
//解析對象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析數組JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//循環遍歷sites數組
for (int i = 0; i < jArray.Count; i++)
{//解析對象JObjectJObject j = JObject.Parse(jArray[i].ToString());string info = j["info"].ToString();//解析數組JArrayJArray jArray2 = (JArray)JsonConvert.DeserializeObject(info);//循環遍歷info數組for (int k = 0; k < jArray2.Count; k++){Console.WriteLine(jArray2[k]);}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/710808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710808.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Web APIs知識點講解(階段二)

DOM-事件基礎 一.事件 1.事件 目標&#xff1a;能夠給 DOM元素添加事件監聽 事件:事件是在編程時系統內發生的動作或者發生的事情&#xff0c;比如用戶在網頁上單擊一個按鈕 事件監聽:就是讓程序檢測是否有事件產生&#xff0c;一旦有事件觸發&#xff0c;就立即調用一個函…

http工具類

public class HttpRequstUtil {/*** http請求方法** param message 查詢條件* param url 查詢地址* param token 身份驗證token* param socketTimeout socket 響應時間* param connectTimeout 超時時間* return 返回字符串*/Deprecatedpublic stat…

金仕達與 DolphinDB 建立深度合作,共筑 FICC 科技創新新篇章

從“關起門做交易”到“打開門做服務”&#xff0c;國內 FICC 業務正經歷從自營到市場化服務的轉變&#xff0c;借助數據分析、算法交易等技術的快速發展&#xff0c;交易團隊能夠更加主動地發現市場需求&#xff0c;為不同客群提供更好的做市業務&#xff0c;FICC 交易電子化已…

打造智能汽車微服務系統平臺:架構的設計與實現

隨著智能汽車技術的飛速發展&#xff0c;微服務架構在汽車行業中的應用越來越廣泛。采用微服務架構可以使汽車系統更加靈活、可擴展&#xff0c;并且有利于快速推出新功能和服務。本文將從設計原則、關鍵技術、數據安全等方面&#xff0c;介紹如何搭建智能汽車微服務系統平臺架…

網絡通信技術

?1.分組交換技術 在網絡通信中&#xff0c;數據通過網絡節點的某種轉發方式&#xff0c;實現從一個端系統到另一個端系統之間的數據傳輸技術稱為數據交換技術。數據交換技術有電路交換、報文交換和分組交換&#xff0c;計算機網絡采用分組交換技術。 分組就是源主機(如服務器…

【Python】FastAPI 項目創建 與 Docker 部署

文章目錄 前言&需求描述1. 本地FastAPI1.1 Python 環境準備1.2 本地 Pycharm 創建FastAPI項目 2. Python FastAPI 部署2.1 服務器配置Python環境2.2.1 下載與配置Git、Pyenv等工具2.2.2 下載與配置Python 2.2 FastAPI 打包成鏡像2.2.1 項目準備所需環境文件2.2.2 編寫Docke…

畢業設計——基于springboot的聊天系統設計與實現(服務端 + 客戶端 + web端)

整個工程包含三個部分&#xff1a; 1、聊天服務器 聊天服務器的職責一句話解釋&#xff1a;負責接收所有用戶發送的消息&#xff0c;并將消息轉發給目標用戶。 聊天服務器沒有任何界面&#xff0c;但是卻是IM中最重要的角色&#xff0c;為表達敬意&#xff0c;必須要給它放個…

入侵和攻擊模擬 (BAS) 技術應用實踐

文章目錄 前言一、實施BAS的必要性二、實施BAS的關鍵步驟1、識別網絡中的脆弱區域2、創建基線安全模型3、選擇合適的BAS工具4、進行模擬攻擊測試5、分析結果并改進三、BAS實施中的挑戰1、組織的專業知識和能力有限2、改變傳統工作流程3、安全預算不足4、難以與現有安全基礎設施…

C語言中的不同變量初始值:深度解析與實踐指南

在C語言編程領域&#xff0c;理解和掌握變量的初始化原理和過程是構建穩健、高效代碼的基礎。C語言對不同類型變量的初始化處理方式存在差異&#xff0c;這要求開發者明確理解并合理應用這些規則以避免潛在的運行時錯誤和未定義行為。本文將詳細解讀C語言中各類變量的初始狀態設…

AI智能分析網關V4車輛違停算法在園區場景中的應用及特點

隨著城市化進程的加速&#xff0c;車輛違停問題愈發嚴重&#xff0c;給城市交通帶來了極大的困擾。為了解決這一問題&#xff0c;AI技術逐漸被應用于車輛違停的檢測中。AI檢測算法在車輛違停方面的應用&#xff0c;主要是通過計算機視覺技術&#xff0c;對道路上的車輛進行實時…

智慧灌區項目案例(甘肅省蘭州市某重點灌區)

?甘肅省蘭州市某重點灌區自上個世紀80年代建成后,灌溉面積達到30萬畝,對推動當地農業發展發揮了重要作用。但長期以來,該灌區的水利管理仍主要依靠人工統計記錄,缺乏實時監測和精細化管理。為實現灌區管理的現代化升級,甘肅水利局委托星創易聯公司設計實施水利信息化項目。 項…

【Python筆記-設計模式】狀態模式

一、說明 狀態模式是一種行為設計模式&#xff0c;用于解決對象在不同狀態下具有不同行為 (一) 解決問題 在對象行為根據對象狀態而改變時&#xff0c;規避使用大量的條件語句來判斷對象的狀態&#xff0c;提高系統可維護性 (二) 使用場景 當對象的行為取決于其狀態&#…

C#使用iText7將多個PDF文檔合并為單個文檔

使用HtmlAgilityPack抓取并分析網頁內容&#xff0c;然后再調用PuppeteerSharp將網頁生成PDF文件&#xff0c;最終的成果如下圖所示&#xff0c;得到將近120個pdf文檔。能看&#xff0c;但是不方便&#xff0c;需要逐個打開文檔才能看到所需的內容&#xff0c;最好能將這些文檔…

淺談 Linux 網絡編程 socket

文章目錄 socket 介紹 socket 介紹 socket 被翻譯成 網絡套接字&#xff0c;這個名字實在是不好理解&#xff0c;我更愿意稱為"插槽"。 忽略 socket 的中文名&#xff0c;先無腦記住兩個規則&#xff1a; ① 記住&#xff0c;一個文件描述符(fd) 指向一個 socket&…

GPT-SoVITS音色克隆-模型訓練步驟

GPT-SoVITS音色克隆-模型訓練步驟 GPT-SoVITS模型源碼一個簡單的TTS后端項目 基于模型部署和訓練教程&#xff0c;語雀 模型部署和訓練教程 啟動模型訓練的主頁面 1. 切到模型路徑 /psycheEpic/GPT-SoVITS進入Python虛擬環境&#xff0c;并掛起執行python腳本 conda activ…

機器學習(II)--樣本不平衡

現實中&#xff0c;樣本&#xff08;類別&#xff09;樣本不平衡&#xff08;class-imbalance&#xff09;是一種常見的現象&#xff0c;如&#xff1a;金融欺詐交易檢測&#xff0c;欺詐交易的訂單樣本通常是占總交易數量的極少部分&#xff0c;而且對于有些任務而言少數樣本更…

Linux信號【產生-保存-處理】

目錄 前言&#xff1a; 1、進程信號基本概念 1.1、什么是信號&#xff1f; 1.2、信號的作用 2、鍵盤鍵入 2.1、ctrlc 終止前臺進程 2.1.1、signal 注冊執行動作 3、系統調用 3.1、kill 函數 3.2、模擬實現 myKill 3.3、raise 函數 3.4、abort 函數 4、軟件條件信號…

人工智能福利站,初識人工智能,圖神經網絡學習,第五課

&#x1f3c6;作者簡介&#xff0c;普修羅雙戰士&#xff0c;一直追求不斷學習和成長&#xff0c;在技術的道路上持續探索和實踐。 &#x1f3c6;多年互聯網行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &#x1f389;歡迎 &#x1f44d;點贊?評論…

nginx設置緩存時間、日志分割、開啟多進程、網頁壓縮、配置防盜鏈

一、設置緩存時間 當網頁數據返回給客戶端后&#xff0c;可針對靜態網頁設置緩存時間&#xff0c;在配置文件內的http段內server段添加location&#xff0c;更改字段expires 1d來實現&#xff1a;避免重復請求&#xff0c;加快訪問速度 第一步&#xff1a;修改主配置文件 #修…

Vulnhub靶機:basic_pentesting_2

一、介紹 運行環境&#xff1a;Virtualbox 攻擊機&#xff1a;kali&#xff08;10.0.2.4&#xff09; 靶機&#xff1a;basic_pentesting_2&#xff08;10.0.2.7&#xff09; 目標&#xff1a;獲取靶機root權限和flag 靶機下載地址&#xff1a;https://download.vulnhub.c…