C#中如何提取指定Name值对应的JSON对象数据
解决方案
首先注意:你提供的示例JSON格式不合法,两个对象直接用逗号分隔无法正确解析,需要用数组[]包裹,修正后的合法格式如下:
[ { "Name": "Joe", "gender": "man", "address": "123" }, { "Name": "Rack", "gender": "man", "address": "456" } ]
以下提供两种实现方式:
方式一:强类型反序列化+过滤
1. 定义实体类
先创建与JSON结构匹配的实体类:
public class Person { public string Name { get; set; } public string gender { get; set; } public string address { get; set; } }
如果你的JSON有根对象(比如外层是{"data": [数组内容]}),则需要定义RootObject类:
public class RootObject { public List<Person> data { get; set; } // 属性名需和JSON中的键完全一致 }
2. 过滤逻辑
- 若JSON是纯数组:
var peopleList = JsonConvert.DeserializeObject<List<Person>>(jsonString); var joeData = peopleList.FirstOrDefault(p => p.Name == "Joe"); // joeData即为Name=Joe的对象,无匹配时返回null
- 若JSON有根对象:
var rootInstance = JsonConvert.DeserializeObject<RootObject>(jsonString); var joeData = rootInstance.data.FirstOrDefault(p => p.Name == "Joe");
方式二:动态解析(无需定义实体类)
如果不想创建实体类,可直接用Newtonsoft.Json的JArray动态处理:
var jArray = JArray.Parse(jsonString); var joeObject = jArray.FirstOrDefault(item => item["Name"]?.ToString() == "Joe"); // 可直接取值或转成JSON字符串 string joeGender = joeObject?["gender"]?.ToString(); string joeJson = joeObject?.ToString();
注意事项
- 加入空值判断(比如
?.操作符)避免空引用异常 - 确保JSON格式合法,否则会抛出解析异常
内容的提问来源于stack exchange,提问作者Coder90
相关产品推荐
相关产品推荐

