【发布时间】:2016-06-30 12:16:10
【问题描述】:
我有一个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);
}
但在 foreach 中我只得到第一个
{
"EmployeeNo": "123456",
"EmployeeName": "Midhun Mathew"
}
我没有明白我在这里做错了什么。
我的初衷是将具有相同 EmployeeNo 的 JToken 归为一个 JObject
所以在上述情况下,我将获得 2 个 JObject,因为有 2 个不同的 EmployeeNo
希望我清楚
【问题讨论】:
-
用 firstordeafult 替换你的 forloop 代码对我有用..var t = parsedJson["Sheet1"].FirstOrDefault(s => s["EmployeeNo"] == j);
-
var tokenList = parsed["Sheet1"] .OrderBy(o => o["EmployeeNo"]) .SelectMany(grp => grp.Skip(1));