C#使用foreach遍历JSON 跳过外层ID提取recipients下用户ID
从嵌套JSON中提取指定用户ID的实现方案
原有代码的错误点
- 仅读取了外层数组第一个元素的顶层
id字段,也就是你需要跳过的当前用户ID,没有遍历整个外层数组,也没有访问recipients子数组 - 将单个字符串类型的ID直接传入foreach遍历,实际会逐字符输出该字符串,完全不符合遍历ID列表的预期
- 未兼容单个外层条目下
recipients数组存在多个用户的场景
正确实现代码
确保项目已引入Newtonsoft.Json包(即JArray所属的依赖),参考以下代码:
HttpResponse jsonResp = request.Get("the url where i get the json"); JArray outerArray = JArray.Parse(jsonResp.ToString()); List<string> targetUserIds = new List<string>(); // 遍历外层所有频道/会话条目 foreach (var entry in outerArray) { JArray recipients = entry["recipients"] as JArray; if (recipients == null || recipients.Count == 0) continue; // 遍历当前条目下的所有接收方用户 foreach (var user in recipients) { targetUserIds.Add(user["id"].ToString()); } } // 按你期望的结构遍历输出 foreach (var id in targetUserIds) { Console.WriteLine("ID: " + id); }
运行后将输出你需要的两个目标ID:
ID: 212159523759981524 ID: 899330127958270044
可选简化写法
如果项目支持LINQ,可以省略显式收集ID的步骤,直接查询后遍历:
HttpResponse jsonResp = request.Get("the url where i get the json"); JArray outerArray = JArray.Parse(jsonResp.ToString()); var targetIds = outerArray .SelectMany(entry => (entry["recipients"] as JArray) ?? new JArray()) .Select(user => user["id"].ToString()); foreach (var id in targetIds) { Console.WriteLine("ID: " + id); }
提示:如果后续业务中可能出现重复的用户ID,可以在获取
targetIds时追加.Distinct()方法自动去重。
内容的提问来源于stack exchange,提问作者Th0mas333
相关产品推荐
相关产品推荐

