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

如何在嵌套JObject中根据指定app键获取对应库的path值

解决方法

假设你的JObject结构大致如下(以Steam的libraryfolders为例):

{
  "libraryfolders": {
    "0": {
      "path": "C:\\Program Files (x86)\\Steam",
      "apps": {
        "12345": "..."
      }
    },
    "1": {
      "path": "D:\\Programme\\Games\\Steam",
      "apps": {
        "945360": "..."
      }
    }
  }
}

你可以用以下LINQ语句筛选出目标路径:

using Newtonsoft.Json.Linq;

// 假设你的JObject实例名为steamConfig
string targetAppId = "945360";

string targetPath = steamConfig["libraryfolders"]
    // 遍历libraryfolders下的所有library节点
    .Cast<JProperty>()
    .Select(p => p.Value as JObject)
    // 筛选出apps属性中包含目标AppId的节点
    .Where(library => library["apps"] is JObject apps && apps.ContainsKey(targetAppId))
    // 提取path属性的值
    .Select(library => library["path"]?.ToString())
    // 取第一个匹配的结果(如果有多个可以用ToList()获取所有)
    .FirstOrDefault();

代码说明:

  1. 先通过steamConfig["libraryfolders"]定位到库文件夹的根节点。
  2. 用Cast<JProperty>()将节点转换为可遍历的属性集合(因为libraryfolders下的子节点是以"0"、"1"为键的属性)。
  3. 每个属性的值就是单个library的JObject,通过Select(p => p.Value as JObject)提取出来。
  4. Where条件里先判断apps是否为JObject,再检查是否包含目标AppId键。
  5. 最后提取path的字符串值,用FirstOrDefault()获取第一个匹配的结果(如果有多个符合条件的库,可改用ToList()获取全部)。

内容的提问来源于stack exchange,提问作者sirzento

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:55:21