【发布时间】:2020-01-21 13:32:49
【问题描述】:
我有两个 Json 文件。一个文件 (jOne) 指定在另一个 JSON 文件 (jTwo) 中检查某些内容(某些键和值)的可用性
jOne :- 指定需要在第二个 JSON 文件中查找的所需值是什么
[
{
"IdInOne": "001",
"NameInOne": "Name_2"
},
{
"IdInOne": "002",
"NameInOne": "Name_3"
}
]
jTwo :- 假定具有 JOne 中指定的值的文件
[
{
"IdInTwo": "001",
"NameInTwo": "Name_1"
},
{
"IdInTwo": "001",
"NameInTwo": "Name_2"
},
{
"IdInTwo": "001",
"NameInTwo": "Name_3"
},
{
"IdInTwo": "002",
"NameInTwo": "Name_4"
}
]
所以我要做的是检查某个指定的 json 键和值对是否确实存在于给定的单独 JSON 中,因此在我的第一个 JSON 文件中的指定示例中,值 IdInOne": "001",NameInOne" : "Name_2" 我想检查第二个 JSON 文件是否真的有一个完全匹配的键和值。在第二个 JSON 中有多个匹配项,其中 IdInOne (001) 等于 IdInTwo,但只有一个值同时具有与指定匹配项的 ID 和名称。
我只想验证这一点,如果匹配成功则打印一条消息,如果匹配不成功则打印一个单独的值
这是我尝试过的代码,我发现很难检查一个值是否真的存在
class Program
{
static void Main(string[] args)
{
string jOne = @"D:\DelTemp\test.json";
string jTwo = @"D:\DelTemp\test2.json";
string jOneContent = File.ReadAllText(jOne);
string jTwoContent = File.ReadAllText(jTwo);
var InfoInOne = JsonConvert.DeserializeObject<List<One>>(jOneContent);
var InfoInTwo = JsonConvert.DeserializeObject<List<Two>>(jTwoContent);
foreach (var itemInOne in InfoInOne)
{
foreach (var itemInTwo in InfoInTwo.Where(n => n.IdInTwo == itemInOne.IdInOne && n.NameInTwo==itemInOne.NameInOne))
{
if (itemInTwo.exists())
{
//sucess message must be printed
}
else
{
Console.WriteLine("Item not found" + itemInTwo.NameInTwo)
}
}
}
}
}
public class One
{
public string IdInOne { get; set; }
public string NameInOne { get; set; }
}
public class Two
{
public string IdInTwo { get; set; }
public string NameInTwo { get; set; }
}
注意:- 我当前实现的一个缺点是性能不佳,我相信有没有更好的方法来实现它。也只想打印错误消息,说明在完全迭代并确认它不在第二个 JSON 文件中之后找不到所需/指定的对象
非常感谢您对此的任何帮助
编辑:- Interesct 方法不起作用,因为我收到错误 Two' does not contain a definition for 'exists' and no accessible extension method 'exists' accepting a first argument of type 'Two'
【问题讨论】:
-
您在寻找
InfoInTwo.Any(n => n.IdInTwo == itemInOne.IdInOne && n.NameInTwo==itemInOne.NameInOne),它返回适合if测试的bool? -
@MarcGravell 这也是一个很好的解决方案..知道如何实现它吗?也只是想检查我所做的是否有任何替代实现?
-
嗨@aloisdgmovingtocodidact.com 它没有。我收到错误“它不包含定义....”你能恢复罢工吗?
-
exists应该是Exists()并确保您使用的是 Linq 并且您已经重建了您的项目。
标签: c# .net json loops serialization