gpt4 book ai didi

c# - 如何验证和删除 JSON 对象的嵌套节点

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:13 31 4
gpt4 key购买 nike

我有下面的 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”数组下的以下节点。在这里,我试图删除“time”属性中没有值“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"
]
}
]
}
]
}

关于c# - 如何验证和删除 JSON 对象的嵌套节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676487/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com