Json to JObject轉換的使用方法

来源:http://www.cnblogs.com/klsw/archive/2016/09/25/5904573.html
-Advertisement-
Play Games

Linq to JSON是用來操作JSON對象的.可以用於快速查詢,修改和創建JSON對象.當JSON對象內容比較複雜,而我們僅僅需要其中的一小部分數據時,可以考慮使用Linq to JSON來讀取和修改部分的數據而非反序列化全部. 二.創建JSON數組和對象 在進行Linq to JSON之前,首 ...


Linq to JSON是用來操作JSON對象的.可以用於快速查詢,修改和創建JSON對象.當JSON對象內容比較複雜,而我們僅僅需要其中的一小部分數據時,可以考慮使用Linq to JSON來讀取和修改部分的數據而非反序列化全部.

二.創建JSON數組和對象

在進行Linq to JSON之前,首先要瞭解一下用於操作Linq to JSON的類.

類名 說明
JObject
 用於操作JSON對象
JArray
 用語操作JSON數組
JValue
 表示數組中的值
JProperty
 表示對象中的屬性,以"key/value"形式
JToken
 用於存放Linq to JSON查詢後的結果

 

 

 

 

 

 

 

 

1.創建JSON對象

複製代碼
            JObject staff = new JObject();
            staff.Add(new JProperty("Name", "Jack"));
            staff.Add(new JProperty("Age", 33));
            staff.Add(new JProperty("Department", "Personnel Department"));
            staff.Add(new JProperty("Leader", new JObject(new JProperty("Name", "Tom"), new JProperty("Age", 44), new JProperty("Department", "Personnel Department"))));
            Console.WriteLine(staff.ToString());
複製代碼

結果:

除此之外,還可以通過一下方式來獲取JObject.JArray類似。

方法   說明
JObject.Parse(string json)
json含有JSON對象的字元串,返回為JObject對象
JObject.FromObject(object o)

o為要轉化的對象,返回一個JObject對象

JObject.Load(JsonReader reader)
reader包含著JSON對象的內容,返回一個JObject對象

 

 

 

 

 

 

2.創建JSON數組

複製代碼
            JArray arr = new JArray();
            arr.Add(new JValue(1));
            arr.Add(new JValue(2));
            arr.Add(new JValue(3));
            Console.WriteLine(arr.ToString());
複製代碼

結果:

三.使用Linq to JSON

1.查詢
首先準備Json字元串,是一個包含員工基本信息的Json

string json = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";

①獲取該員工的姓名

複製代碼
            //將json轉換為JObject
            JObject jObj = JObject.Parse(json);
            //通過屬性名或者索引來訪問,僅僅是自己的屬性名,而不是所有的
            JToken ageToken =  jObj["Age"];
            Console.WriteLine(ageToken.ToString());
複製代碼

結果:

②獲取該員工同事的所有姓名

複製代碼
            //將json轉換為JObject
            JObject jObj = JObject.Parse(json);
            var names=from staff in jObj["Colleagues"].Children()
                             select (string)staff["Name"];
            foreach (var name in names)
                Console.WriteLine(name);
複製代碼

"Children()"可以返回所有數組中的對象

結果:

2.修改

①現在我們發現獲取的json字元串中Jack的年齡應該為35

            //將json轉換為JObject
            JObject jObj = JObject.Parse(json);
            jObj["Age"] = 35;
            Console.WriteLine(jObj.ToString());

結果:

註意不要通過以下方式來修改:

            JObject jObj = JObject.Parse(json);
            JToken age = jObj["Age"];
            age = 35;

②現在我們發現Jack的同事Tom的年齡錯了,應該為45

複製代碼
            //將json轉換為JObject
            JObject jObj = JObject.Parse(json);
            JToken colleagues = jObj["Colleagues"];
            colleagues[0]["Age"] = 45;
            jObj["Colleagues"] = colleagues;//修改後,再賦給對象
            Console.WriteLine(jObj.ToString());
複製代碼

結果:

3.刪除
①現在我們想刪除Jack的同事

            JObject jObj = JObject.Parse(json);
            jObj.Remove("Colleagues");//跟的是屬性名稱
            Console.WriteLine(jObj.ToString());

結果:

②現在我們發現Abel不是Jack的同事,要求從中刪除

            JObject jObj = JObject.Parse(json);
            jObj["Colleagues"][1].Remove();
            Console.WriteLine(jObj.ToString());

結果:

4.添加
①我們發現Jack的信息中少了部門信息,要求我們必須添加在Age的後面

            //將json轉換為JObject
            JObject jObj = JObject.Parse(json);
            jObj["Age"].Parent.AddAfterSelf(new JProperty("Department", "Personnel Department"));
            Console.WriteLine(jObj.ToString());

結果:

②現在我們又發現,Jack公司來了一個新同事Linda

            //將json轉換為JObject
            JObject jObj = JObject.Parse(json);
            JObject linda = new JObject(new JProperty("Name", "Linda"), new JProperty("Age", "23"));
            jObj["Colleagues"].Last.AddAfterSelf(linda);
            Console.WriteLine(jObj.ToString());

結果:

四.簡化查詢語句

使用函數SelectToken可以簡化查詢語句,具體:
①利用SelectToken來查詢名稱

            JObject jObj = JObject.Parse(json);
            JToken name = jObj.SelectToken("Name");
            Console.WriteLine(name.ToString());

結果:

②利用SelectToken來查詢所有同事的名字

            JObject jObj = JObject.Parse(json);
            var names = jObj.SelectToken("Colleagues").Select(p => p["Name"]).ToList();
            foreach (var name in names)
                Console.WriteLine(name.ToString());

結果:

③查詢最後一名同事的年齡

            //將json轉換為JObject
            JObject jObj = JObject.Parse(json);
            var age = jObj.SelectToken("Colleagues[1].Age");
            Console.WriteLine(age.ToString());

結果:

 

FAQ

1.如果Json中的Key是變化的但是結構不變,如何獲取所要的內容?

例如: 複製代碼
 1 {
 2 "trends":
 3 {
 4 "2013-05-31 14:31":
 5 [
 6 {"name":"我不是誰的偶像",
 7 "query":"我不是誰的偶像",
 8 "amount":"65172",
 9 "delta":"1596"},
10 {"name":"世界無煙日","query":"世界無煙日","amount":"33548","delta":"1105"},
11 {"name":"最萌身高差","query":"最萌身高差","amount":"32089","delta":"1069"},
12 {"name":"中國合伙人","query":"中國合伙人","amount":"25634","delta":"2"},
13 {"name":"exo回歸","query":"exo回歸","amount":"23275","delta":"321"},
14 {"name":"新一吻定情","query":"新一吻定情","amount":"21506","delta":"283"},
15 {"name":"進擊的巨人","query":"進擊的巨人","amount":"20358","delta":"46"},
16 {"name":"誰的青春沒缺失","query":"誰的青春沒缺失","amount":"17441","delta":"581"},
17 {"name":"我愛幸運七","query":"我愛幸運七","amount":"15051","delta":"255"},
18 {"name":"母愛10平方","query":"母愛10平方","amount":"14027","delta":"453"}
19 ]
20 },
21 "as_of":1369981898
22 }
複製代碼

其中的"2013-05-31 14:31"是變化的key,如何獲取其中的"name","query","amount","delta"等信息呢?
通過Linq可以很簡單地做到:

複製代碼
 var jObj = JObject.Parse(jsonString);
            var tends = from c in jObj.First.First.First.First.Children()
                        select JsonConvert.DeserializeObject<Trend>(c.ToString());
public class Trend
{
            public string Name { get; set; }
            public string Query { get; set; }
            public string Amount { get; set; }
            public string Delta { get; set; }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設計表格我覺得用PowerDesigner比起在SQL Server中設計表格簡單快捷許多。 首先,我們新建一個Model(可以使用快捷鍵Ctrl + N) 在PowerDesigner中側邊欄有浮動小工具欄: 這都是我們設計的工具,然後點擊表格Columns設計表格: 之後就設計表格就可以了。 就 ...
  • 1.背景說明: vim編輯器是linux一款非常流行功能強大的文本編輯。配置好vim可大大提高代碼的開發效率 2.配置方案: 我在github搜索了別人是如何進行vim配置的,在這裡你可以選擇一款適合你的配置方案,這裡我選擇Star比較多的配置方案:vimrc 3.如何安裝: 參考上述鏈接,安裝說明 ...
  • 有時候因為斷電或者其他原因導致伺服器關機,這在測試伺服器上面是很常見的事情。而伺服器上面的多個進程也就關閉了,每次都要去重啟很麻煩,於是就查了一下設置開機自動啟動的方法,這樣開機就只用稍微看看服務是否啟動就好了,不用一個一個去啟動了。 ...
  • 一、POST加電自檢 按下電源後ROM晶元中的CMOS程式執行並檢測CPU、記憶體等設備是否存在並正常運行,CMOS中的程式叫BIOS,可以設置硬碟介面,網卡音效卡開關之類的簡單設置。一般PC機主板上有一個紐扣電池,這個電池就是給ROM供電的,可以保證主板斷電後BIOS的一些基本設置不會重置。 下麵是一 ...
  • 我們知道,迄今為止,Ubuntu已有多個發行版,如11.04、11.10,以至於現在最新的16. 。而我們平常通過apt get來安裝軟體,如果OS版本不同,那麼鏡像源的配置就不同,否則就會出現找不到對應軟體、軟體版本不匹配等一系列奇怪的問題。這裡,我就講述一下如何配置不同的版本的鏡像源。在此,我就 ...
  • 1.編譯器gcc的語法順序 PC: gcc -o ana *.o ${LIBS} 輸出可執行文件名 各種目標文件 要鏈接的庫 交叉編譯:arm-linux-gcc ${LIBS] *.o -o ana 2.Minigui.config 將/usr/local/etc/MiniGUI.cfg 與 ./ ...
  • 關於《rsyslog+mysql+loganalyzer搭建日誌伺服器<個人筆記>》的反思--鏈接--http://www.cnblogs.com/drgcaosheng/p/5832697.html 之前使用這個搭建了一個日誌伺服器,但是在mysql中,日誌增加太快,過了些天,已經有幾千萬的數據了 ...
  • 0 Asp.Net Core 項目實戰之許可權管理系統(0) 無中生有 1 Asp.Net Core 項目實戰之許可權管理系統(1) 使用AdminLTE搭建前端 2 Asp.Net Core 項目實戰之許可權管理系統(2) 功能及實體設計 3 Asp.Net Core 項目實戰之許可權管理系統(3) 通過 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...