利用C#怎么獲取動(dòng)態(tài)key的json對(duì)象值-創(chuàng)新互聯(lián)

利用C#怎么獲取動(dòng)態(tài)key的json對(duì)象值?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

10年積累的成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有東港免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

問題描述

如果直接獲取某個(gè)json數(shù)組中的元素將得到如下的json

{
 "44": {
  "height": 25,
  "appeared": -70000000,
  "length": 44,
  "order": "saurischia",
  "vanished": -70000000,
  "weight": 135000
 }
}

這個(gè)json對(duì)象如果使用C#類來反序列化,那么實(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)的無法使用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ī)范的或者說是很難以獲取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;
}

看完上述內(nèi)容,你們掌握利用C#怎么獲取動(dòng)態(tài)key的json對(duì)象值的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前題目:利用C#怎么獲取動(dòng)態(tài)key的json對(duì)象值-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://www.bm7419.com/article8/dgciip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站營(yíng)銷、建站公司、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化