【发布时间】:2022-01-10 21:56:30
【问题描述】:
我有许多 JSON 数组,其中包含不同类型的节点。
示例 Json 1:
[
{
"EmpID": "23",
"EmpName": "Jhon",
"Age": "23"
},
{
"EmpID": "29",
"EmpName": "Paul",
"Age": "25"
},
{
"EmpID": "123",
"EmpName": "Jack",
"Age": "29"
},
{
"EmpID": "129",
"EmpName": "Apr",
"Age": "29"
}
]
示例 Json 2
[
{
"DepID": "2",
"Name": "Sales"
},
{
"DepID": "5",
"Name": "Marketing"
},
{
"DepID": "12",
"Name": "IT"
}
]
我想根据不同的条件过滤它们,例如
1)EmpID=29
这应该返回
[
{
"EmpID": "29",
"EmpName": "Paul",
"Age": "25",
}
]
2)Age=23 和 EmpName=Jhon
这应该返回
[
{
"EmpID": "23",
"EmpName": "Jhon",
"Age": "23"
}
]
- 年龄=29
这应该返回
[
{
"EmpID": "123",
"EmpName": "Jack",
"Age": "29"
},
{
"EmpID": "129",
"EmpName": "Apr",
"Age": "29"
}
]
所以我需要一种通用方法来对 JSON 数组执行任意数量的过滤器。我打算使用一些逗号分隔的字符串(例如Age="23",EmpName="Jhon")来获取所有过滤器,并且可以将其转换为代码中的任何格式。
我曾尝试使用 Json Path 创建动态过滤器,例如 $.[?(@.Age == '23' && @.EmpName == 'Jhon')]。
我也尝试过使用 LINQ 之类的
var result = JsonConvert.DeserializeObject(jsonString);
var res = (result as Newtonsoft.Json.Linq.JArray).Where(x =>
x["Age"].ToString() =="23" && x["EmpName"].ToString()=="Jhon").ToList();
但是如何根据收到的任意数量的条件动态生成 where 条件
还有一个计划包括日期过滤器,以防json中有一些日期时间节点,例如BirthDate>12051995。
我不确定如何使用任意数量的输入过滤条件进行动态过滤。
【问题讨论】:
-
我什么都做不到是什么意思?
-
为什么不使用 json.net 反序列化器?
-
反序列化 JSON --> 转换为对象列表 --> LINQ .Where() 过滤数据。
-
@YongShun 好的,我试过这个并且工作正常。 var res = (result as Newtonsoft.Json.Linq.JArray).Where(x => x["Age"].ToString() =="23" && x["EmpName"].ToString()=="Jhon ").ToList();但是如何根据任意数量的条件动态生成 where 条件