gpt4 book ai didi

c# - 过滤解析的 JSON 对象

转载 作者:行者123 更新时间:2023-11-30 19:08:33 25 4
gpt4 key购买 nike

我正在调用休息电话并收到以下 JSON 响应:

{
"issues": [{
"id": "250271",
"self": "KeyUrl1",
"key": "Key-8622",
"fields": {
"attachment": [{
"self": "AttachmentUrl1",
"id": "106198",
"filename": "export.htm"
}
],
"customfield_11041": "Test"
}
},
{
"id": "250272",
"self": "KeyUrl2",
"key": "Key-8621",
"fields": {
"attachment": [{
"self": "AttachmentUrl2",
"id": "106199",
"filename": "lmn.htm"
}
],
"customfield_11041": "Test"
}
},
]
}

我使用 NewtonSoft Json 将其解析为 JObject。

var jObject = JObject.Parse(response);

此外,我正在尝试过滤此类记录,其中附件丢失或附件均不包含“导出”之类的文件名。

以下是我编写的代码,理想情况下它应该只在记录对象中产生 1 条记录,但它会返回这两个对象。

var issues = jObject["issues"] as JArray;
var records = issues.Where(x => !x["fields"]["attachment"].Any() || !x["fields"]["attachment"].Any(y => y["filename"].Contains("export")));

需要帮助找出问题所在。

这是 fiddle 链接 - https://dotnetfiddle.net/AVyIHr

最佳答案

问题是您正在调用 Contains("export")关于 y["filename"] 的结果,这不是一个字符串 - 它是一个 JToken .您需要先转换为字符串,才能使用 Contains 的形式您所期待的。

此外,您可以摆脱第一个条件 - no 附件的问题无论如何都没有任何带有“导出”文件名的附件。

剩下这个:

var records = issues
.Where(x => !x["fields"]["attachment"].Any(y => ((string) y["filename"]).Contains("export")))
.ToList();

您可能会发现反序列化为一个类更简单,但是 - 这将降低拼写错误的风险此类转换错误的风险。如果你反序列化为 List<Issue>你有一个条件:

x => !x.Fields.Attachments.Any(y => y.Filename.Contains("export"))

...我认为这更干净。

关于c# - 过滤解析的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55351764/

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