Mid*_*hew 0 c# linq json json.net
我有一个 json 字符串,如下所示
{
'Sheet1': [{
'EmployeeNo': '123456',
'EmployeeName': 'Midhun Mathew'
}, {
'EmployeeNo': '123457',
'EmployeeName': 'Bill Gates'
}, {
'EmployeeNo': '123456',
'Address': 'AAAA'
}, {
'EmployeeNo': '123457',
'Address': 'BBBB'
}]
}
JObject parsedJson = JObject.Parse(jsonString);
// Get the EmployeeNo's
List<JToken> tokenList = parsedJson["Sheet1"]
.GroupBy(d => d["EmployeeNo"])
.Select(s => s.Key)
.ToList();
// Get the tokens which have the Same 'EmployeeNo'
foreach (JToken j in tokenList)
{
IEnumerable<JToken> t = parsedJson["Sheet1"].Where(s => s["EmployeeNo"] == j);
}
Run Code Online (Sandbox Code Playgroud)
但在 foreach 中我只得到第一个
{
"EmployeeNo": "123456",
"EmployeeName": "Midhun Mathew"
}
Run Code Online (Sandbox Code Playgroud)
我不明白我在这里做错了什么。
我的初衷是将具有相同 EmployeeNo 的 JToken 分组为一个 JObject
所以在上面的例子中我会得到 2 个 JObject,因为有 2 个不同的 EmployeeNo
希望我清楚
目前尚不完全清楚您在这里要做什么,但您似乎正在按 分组EmployeeNo,然后丢弃结果以仅获取键,然后尝试以更手动的方式再次进行分组。
如果删除该Select(s => s.Key)部分,则可以直接使用分组:
var tokensByEmployeeNo = parsedJson["Sheet1"].GroupBy(x => x["EmployeeNo"]);
foreach (var grouping in tokensByEmployeeNo)
{
Console.WriteLine($"Key: {grouping.Key}");
foreach (var token in grouping)
{
Console.WriteLine(token);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想JObject为每个分组创建一个“新”,那么您可能需要为JArray每个组创建一个:
var groupedArrays = parsedJson["Sheet1"]
.GroupBy(x => x["EmployeeNo"])
.Select(groupedRecords => new JArray(groupedRecords));
Run Code Online (Sandbox Code Playgroud)
其中第一个看起来像这样,例如:
[
{
"EmployeeNo": "123456",
"EmployeeName": "Midhun Mathew"
},
{
"EmployeeNo": "123456",
"Address": "AAAA"
}
]
Run Code Online (Sandbox Code Playgroud)