我是靠谱客的博主 傻傻柜子,这篇文章主要介绍C# 获取动态key的json对象的值案例,现在分享给大家,希望可以做个参考。

问题描述

如果直接获取某个json数组中的元素将得到如下的json

复制代码
1
2
3
4
5
6
7
8
9
10
{ "44": { "height": 25, "appeared": -70000000, "length": 44, "order": "saurischia", "vanished": -70000000, "weight": 135000 } }

这个json对象如果使用C#类来反序列化,那么实体类的结构如下,实体类的类名需要与json对象key相同的才可以使用json反序列化,这样对程序造成了极大的不便。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
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对象由于key是动态的无法使用C#反序列化,但是直接取到value就能序列化了,如下。

复制代码
1
2
3
4
5
6
7
8
{ "height":25, "appeared":-70000000, "length":44, "order":"saurischia", "vanished":-70000000, "weight":135000 }

以上json对象就可以使用我们常用的格式转换了。

复制代码
1
2
3
4
5
6
7
8
9
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; } }

实现代码

从动态key的json对象里面拿到value那部分,可以反序列化的字符串,请使用如下的函数,注意引入类库。

复制代码
1
2
3
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Linq;
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <summary> /// 本类用于处理动态Key的json对象 /// </summary> /// <param name="jObject">需要处理的json对象</param> /// <returns>json对象的第一个元素的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; }

补充:C# 获取JSON字符串中指定KEY的值

背景

从Markdown系统API接口获取到JSON格式数据,JSON字符串是不规范的或者说是很难以获取doc_id字段(位于树的叶子节点,但是却不知道有多少个枝干节点),这时想到了采用正则表达式获取指定KEY的值,于是产生了这篇文章。

适用场景

不想要解析整个JSON字符串,只想获取其中某个KEY的值

JSON字符串对应的对象比较难以构造,只需要获取其中某几个KEY的值

JSON字符串不规范,只需要获取指定KEY的值(特别是有一些是数组对象,有一些是非数据对象)

代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <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; }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持靠谱客。如有错误或未考虑完全的地方,望不吝赐教。

最后

以上就是傻傻柜子最近收集整理的关于C# 获取动态key的json对象的值案例的全部内容,更多相关C#内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(109)

评论列表共有 0 条评论

立即
投稿
返回
顶部