c# - 如何验证和删除 JSON 对象的嵌套节点
问题描述
我有以下 JSON 对象
{
"movieList":[
{
"movieID":1,
"title":"TITLE 1",
"showTimes":[
{
"date":"xx",
"time":["11:00" , "15:00" ]
},
{
"date":"xx",
"time":["11:00"]
},
{
"date":"xx",
"time":["18:00" ]
},
{
"date":"xx",
"time":["11:00" , "15:00" , "18:00" ]
}
]
}
]
}
想要删除“showTimes”数组下的以下节点。在这里,我试图删除“时间”属性中没有值“18:00”的节点。
{
"date":"xx",
"time":["11:00" , "15:00" ]
},
{
"date":"xx",
"time":["11:00"]
}
使用下面的代码,我可以在 foreach 循环中获取时间值
StreamReader rs = new StreamReader("xx.json");
string json = rs.ReadToEnd();
JObject jsonObject = JObject.Parse(json);
JToken jToken = JToken.Parse(json);
var result = jToken["movieList"].SelectMany(x => x["showTimes"].SelectMany(y => y["time"].Select(z => z)).ToList());
foreach (var item in result)
{
if (item.ToString() != "18:00")
{
// item.Parent.Remove();
}
}
如何在 foreach 循环中从我的 JSON 对象中删除上述节点?
解决方案
我也会建议使用模型类,但对于你的情况,这应该可以
JObject jsonObject = JObject.Parse(json);
JToken jToken = JToken.Parse(json);
var result = jToken["movieList"].SelectMany(x => x["showTimes"]).ToList();
foreach (var item in result)
{
var times = item.SelectTokens("time").Values().ToList();
if (!times.Where(x => x.ToString().Trim() == "18:00").Any())
{
item.Remove();
}
}
var output = jToken.ToString(Formatting.Indented);
Console.WriteLine(output);
输出
{
"movieList": [
{
"movieID": 1,
"title": "TITLE 1",
"showTimes": [
{
"date": "xx",
"time": [
"18:00"
]
},
{
"date": "xx",
"time": [
"11:00",
"15:00",
"18:00"
]
}
]
}
]
}
推荐阅读
- compiler-errors - Imagemagick 没有此图像格式“PNG”Ubuntu 20.04 的解码委托
- scripting - Ping 解析问题
- ios - Iphone x 及更高版本的安全区域内的图像选择器 cameraoverlay 无法正常工作
- kubernetes - 无头服务在 Kubernetes 中是否“原子”更新?
- google-cloud-platform - 使用 n2-standard-2 机器类型运行数据流作业,数据流作业是否可以随时仅使用 2 个 vCPU 运行,或者它可以自动扩展到配额限制
- c++ - 子类运算符 << 重载 C++
- shapley - shapley-values 如何解释我的模型中没有特征?
- amazon-web-services - 如何使用 Java SDK 和 SSO 向 AWS 进行身份验证
- laravel - 如何在 LARAVEL 中编辑搜索表单的占位符
- postgresql - 在插入PostgreSQL之前剪切一列的内容