You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:46:34