C# 獲取動(dòng)態(tài)key的json對(duì)象的值案例
問(wèn)題描述
如果直接獲取某個(gè)json數(shù)組中的元素將得到如下的json
{ "44": { "height": 25, "appeared": -70000000, "length": 44, "order": "saurischia", "vanished": -70000000, "weight": 135000 } }
這個(gè)json對(duì)象如果使用C#類來(lái)反序列化,那么實(shí)體類的結(jié)構(gòu)如下,實(shí)體類的類名需要與json對(duì)象key相同的才可以使用json反序列化,這樣對(duì)程序造成了極大的不便。
public class 44 { public int height { get; set; } public int appeared { get; set; } public int length { get; set; } public string order { get; set; } public int vanished { get; set; } public int weight { get; set; } } public class Root { public 44 44 { get; set; } }
解決方案
以上json對(duì)象由于key是動(dòng)態(tài)的無(wú)法使用C#反序列化,但是直接取到value就能序列化了,如下。
{ "height":25, "appeared":-70000000, "length":44, "order":"saurischia", "vanished":-70000000, "weight":135000 }
以上json對(duì)象就可以使用我們常用的格式轉(zhuǎn)換了。
public class Root { public int height { get; set; } public int appeared { get; set; } public int length { get; set; } public string order { get; set; } public int vanished { get; set; } public int weight { get; set; } }
實(shí)現(xiàn)代碼
從動(dòng)態(tài)key的json對(duì)象里面拿到value那部分,可以反序列化的字符串,請(qǐng)使用如下的函數(shù),注意引入類庫(kù)。
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Linq;
/// <summary> /// 本類用于處理動(dòng)態(tài)Key的json對(duì)象 /// </summary> /// <param name="jObject">需要處理的json對(duì)象</param> /// <returns>json對(duì)象的第一個(gè)元素的values</returns> public static string GetJsonValue(string strJson) { string strResult; JObject jo = JObject.Parse(strJson); string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray(); if (values == null) { strResult = ""; } else { strResult = values[0]; } return strResult; }
補(bǔ)充:C# 獲取JSON字符串中指定KEY的值
背景
從Markdown系統(tǒng)API接口獲取到JSON格式數(shù)據(jù),JSON字符串是不規(guī)范的或者說(shuō)是很難以獲取doc_id字段(位于樹的葉子節(jié)點(diǎn),但是卻不知道有多少個(gè)枝干節(jié)點(diǎn)),這時(shí)想到了采用正則表達(dá)式獲取指定KEY的值,于是產(chǎn)生了這篇文章。
適用場(chǎng)景
不想要解析整個(gè)JSON字符串,只想獲取其中某個(gè)KEY的值
JSON字符串對(duì)應(yīng)的對(duì)象比較難以構(gòu)造,只需要獲取其中某幾個(gè)KEY的值
JSON字符串不規(guī)范,只需要獲取指定KEY的值(特別是有一些是數(shù)組對(duì)象,有一些是非數(shù)據(jù)對(duì)象)
代碼
/// <summary> /// 獲取JSON字符串中指定KEY的值 /// </summary> /// <param name="jsonString"></param> /// <param name="key"></param> /// <returns></returns> public List<String> GetJsonValue(String jsonString, String key) { String pattern = $"\"{key}\":\"(.*?)\\\""; MatchCollection matches = Regex.Matches(jsonString, pattern, RegexOptions.IgnoreCase); List<string> lst = new List<string>(); foreach (Match m in matches) { lst.Add(m.Groups[1].Value); } return lst; }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動(dòng)從FTP服務(wù)器下載文件
這篇文章主要為大家詳細(xì)介紹了C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動(dòng)從FTP服務(wù)器下載文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03總結(jié)C#刪除字符串?dāng)?shù)組中空字符串的幾種方法
C#中要如何才能刪除一個(gè)字符串?dāng)?shù)組中的空字符串呢?下面的文章會(huì)介紹多種方式來(lái)實(shí)現(xiàn)清除數(shù)組中的空字符串,以及在.net中將字符串?dāng)?shù)組中字符串為空的元素去除。2016-08-08C#實(shí)現(xiàn)的UDP收發(fā)請(qǐng)求工具類實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的UDP收發(fā)請(qǐng)求工具類,結(jié)合具體實(shí)例形式分析了C#針對(duì)UDP請(qǐng)求的監(jiān)聽、接收、發(fā)送等相關(guān)操作技巧,需要的朋友可以參考下2017-06-06C#事件中的兩個(gè)參數(shù)詳解(object sender,EventArgs e)
這篇文章主要介紹了C#事件中的兩個(gè)參數(shù)詳解(object sender,EventArgs e),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09C#定時(shí)每天00點(diǎn)00分00秒自動(dòng)重啟軟件
這篇文章主要為大家詳細(xì)介紹了C#定時(shí)每天00點(diǎn)00分00秒自動(dòng)重啟軟件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08