c# - 在 C# 中使用 JObject 解析键值的 Json 键/值
问题描述
我正在尝试获取键值的子键\值。我要完成的是删除为空或具有“-”或具有“N/A”的元素。我似乎无法弄清楚要遍历要搜索的值。
{
"name": {
"first": "Robert",
"middle": "",
"last": "Smith"
},
"age": 25,
"DOB": "-",
"hobbies": [
"running",
"coding",
"-"
],
"education": {
"highschool": "N/A",
"college": "Yale"
}
}
代码:
JObject jObject = JObject.Parse(response);
foreach (var obj in jObject)
{
Console.WriteLine(obj.Key);
Console.WriteLine(obj.Value);
}
我正在尝试搜索"first":"Robert","middle":"","last":"Smith"
解决方案
您可以使用Descendants
方法获取类型的子标记JProperty
,然后过滤它们的值并打印它们或一一删除
var properties = json.Descendants()
.OfType<JProperty>()
.Where(p =>
{
if (p.Value.Type != JTokenType.String)
return false;
var value = p.Value.Value<string>();
return string.IsNullOrEmpty(value);
})
.ToList();
foreach (var property in properties)
property.Remove();
Console.WriteLine(json);
为您提供以下结果("middle": ""
已删除属性)
{
"name": {
"first": "Robert",
"last": "Smith"
},
"age": 25,
"DOB": "-",
"hobbies": [
"running",
"coding",
"-"
],
"education": {
"highschool": "N/A",
"college": "Yale"
}
}
您还可以在return
语句中添加更多条件,例如return string.IsNullOrEmpty(value) || value.Equals("-");
删除"DOB": "-"
属性
推荐阅读
- node.js - 如何删除发电机组中的最后一个元素?
- python - dask - AttributeError:“系列”对象没有属性“拆分”
- python-3.x - Python 复数的除法
- postgresql - 如何插入具有空值的显式 id 属性的数据?
- python - 如何检查功能来自哪里的模块?
- firebase-realtime-database - 禁止用户:如何将他踢出聊天室(触发客户端事件)
- java - 如何将 xml 配置 bean 转换为 java 注释 bean ( spring boot )
- powershell - 将参数传递给 Register-EngineEvent 动作脚本块
- r - 查找不同变量中的出现次数
- java - org.openqa.selenium.InvalidSelectorException:尝试定位元素时选择器无效