循环遍历多个 JObject 级别并将信息收集为字符串

2024-04-21

我使用以下代码从 URL 收集 Json 数据。

            var json = new WebClient().DownloadString("http://steamcommunity.com/id/tryhardhusky/inventory/json/753/6");
            JObject jo = JObject.Parse(json);
            JObject ja = (JObject)jo["rgDescriptions"];

            int cCount = 0;
            int bCount = 0;
            int eCount = 0;

            foreach(var x in ja){

                // I'm stuck here.
                string type = (Object)x["type"];

            }

            CUAI.sendMessage("I found: " + ja.Count.ToString());

在我到达 foreach 语句之前,一切都运行良好。
这是 JSON 数据的片段。

{
    "success": true,
    "rgInventory": {
        "Blah other stuff"
    },
    "rgDescriptions": {
        "637390365_0": {
            "appid": "753",
            "background_color": "",
            "type": "0RBITALIS Trading Card"
        "175240190_0": {
            "appid": "753",
            "background_color": "",
            "type": "Awesomenauts Trading Card"
        },
        "195930139_0": {
            "appid": "753",
            "background_color": "",
            "type": "CONSORTIUM Emoticon"
        }
    }
}

我想循环遍历 rgDescriptions 中的每个项目并获取typedata 作为字符串,然后检查它是否包含background, emoticon or trading card.
我知道我可以使用if(type.Contains("background"))检查项目类型是什么,但我在 foreach 循环中遇到问题。

如果我使用foreach(JObject x in ja)我得到一个cannot convert type Error.
如果我使用foreach(Object x in ja)它提出了一个Cannot apply indexing of type object.
当我使用时也会出现此错误foreach(var x in ja) and string type = (JObject)x["type"];

谁能告诉我我做错了什么吗?


您的 JSON 中有一些错误。使用 jsonlint.com 检查一下。我认为它应该看起来像这样:

{
    "success": true,
    "rgInventory": {
        "Blah other stuff": ""
    },
    "rgDescriptions": {
        "637390365_0": {
            "appid": "753",
            "background_color": "",
            "type": "0RBITALIS Trading Card"
        },
        "175240190_0": {
            "appid": "753",
            "background_color": "",
            "type": "Awesomenauts Trading Card"
        },
        "195930139_0": {
            "appid": "753",
            "background_color": "",
            "type": "CONSORTIUM Emoticon"
        }
    }
}

您可以使用 JProperty、JToken 和 SelectToken 方法来获取类型:

var json = new WebClient().DownloadString("http://steamcommunity.com/id/tryhardhusky/inventory/json/753/6");
JObject jo = JObject.Parse(json);

foreach (JProperty x in jo.SelectToken("rgDescriptions"))
{
    JToken type = x.Value.SelectToken("type");
    string typeStr = type.ToString().ToLower();

    if (typeStr.Contains("background"))
    {
        Console.WriteLine("Contains 'background'");
    }
    if (typeStr.Contains("emoticon"))
    {
        Console.WriteLine("Contains 'emoticon'");
    }
    if (typeStr.Contains("trading card"))
    {
        Console.WriteLine("Contains 'trading card'");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环遍历多个 JObject 级别并将信息收集为字符串 的相关文章

  • fgetc,检查 EOF

    在书里Linux系统编程我读过一些这样的内容 fgetc返回读取为的字符unsigned char投射到int or EOF在文件末尾或错误 使用时的一个常见错误fgetc is char c if c fgetc EOF 该代码的正确版本
  • 了解左值到右值转换的示例

    我很难理解这段代码 来自 C 14 草案标准的示例 转换拉瓦尔 调用未定义的行为g false 为什么constexpr使程序有效 另外 不访问 是什么意思 y n 在两次通话中g 我们正在返回n数据成员那么为什么最后一行说它不能访问它呢
  • Xamarin 中 QR 扫描后的处理对话框

    我在Xamarin应用程序中使用QR码扫描仪 当它扫描QR码时 它会执行一些操作 大约需要一分钟 而在执行操作时 我想在屏幕上显示一个加载对话框 但是 它没有显示在屏幕上 并且在应用程序的其他地方 它运行得很好 Code var expec
  • 在长时间运行期间发送 Windows 消息?

    我在运行的大型操作中收到以下消息 CLR 无法转换 从 COM 上下文 0x1fe458 到 COM 上下文 0x1fe5c8 60 秒 这 拥有目的地的线程 上下文 公寓最有可能 要么进行非抽水等待 要么 处理很长时间的运行 无需泵送 W
  • 使用 SFML 绘制文本时出现段错误

    我做了一个Button应该绘制一些顶点和字符串的类RenderWindow 这是删除了不相关部分的代码 here http pastebin com 4a5RuS2y是完整的代码 namespace game class Button pu
  • 如何在 Ruby on Rails 中读取远程文件的内容?

    这是我的文件 http example com test txt http example com test txt 我必须阅读以下内容http example com test txt http example com test txt
  • 将supportedRuntime嵌入到exe文件中

    我需要将仅包含supportedRuntime 设置的app config 文件嵌入到我的exe 文件中 我尝试执行构建操作嵌入资源 但它现在没有从配置文件中读取值 并且它不起作用 这是我的配置文件
  • 只允许在 datagridview 单元格中键入一些字符

    有没有办法只将某些字符添加到 datagridview 单元格中 像 1234567890 据我所知 您可以使用两种方法来实现此目的 第一个 我认为最好的 是使用 CellValidating 事件DataGridView并检查输入的文本是
  • 使用箭头键滚动可滚动控件

    我正在使用一个ScrollableControl在我的 C 项目中 我想知道如何将箭头键映射到垂直 水平滚动 编辑 我的图片框获得焦点 并且我设法映射滚动键 这里的问题是 当我按下箭头键时 它会滚动一次 然后失去焦点 将其交给滚动查看器旁边
  • 重复取消引用多个指针,效率较低?

    而不是写 string name first gt next gt next gt next gt name int age first gt next gt next gt next gt age 将其写为 node billy bloc
  • BackgroundWorker 如何决定在哪个线程上运行 RunWorkerCompleted 处理程序?

    我试图弄清楚 BGW 在工作完成后如何决定运行 RunWorkerCompleted 处理程序的线程 我的初始测试使用 WinForm 应用程序 在 UI 线程上 我开始bgw1 RunWorkerAsync 然后我尝试开始bgw2 Run
  • ASP.NET MVC C#:将多个表/查询中的数据引入视图中

    好吧 我仍在掌握 ASP NET 和 MVC 框架的窍门 并将我的知识从经典的 ASP 和 VB 转换过来 所以请保持温柔 我的第一个视图 home details X 运行良好感谢之前的帮助为我指明了正确的方向 https stackov
  • 在库中使用 .Net Standard 1.4 并在应用程序中使用 .Net Framework 4.6.1 时,无法加载文件 System.IO.FileSystem,版本=4.0.1.0

    我有一个包含一个库和两个应用程序的解决方案 这些应用程序代表同一个程序 其中一个针对通过 UAP10 的 Windows App Store 构建 另一个针对使用 Net Framework 4 6 1 的 Microsoft Window
  • LINQ 分组依据和选择集合

    我有这个结构 Customer has many Orders has many OrderItems 我想生成一个列表CustomerItems通过 LINQ 给出的子集OrderItems List of new Customer Li
  • 如何使用 jq 对可能不存在的数组进行排序?

    给定以下 JSON alice items foo bar bob items bar foo charlie items foo bar 我可以排序items数组如下 jq lt users json map items sort ite
  • 在 C# 中同步闪烁标签

    我创建了一个BlinkingLabel类 源自Forms Label 其中有一个Forms Timer这允许我启用和禁用闪烁效果 我创建了 4 个标签BlinkingLabel类型 我的问题是 如果所有 4 个标签在不同时间闪烁 则闪烁效果
  • STL迭代器是否保证集合更改后的有效性?

    假设我有某种集合 并且我在它的开头获得了一个迭代器 现在假设我修改了该集合 无论集合或迭代器的类型如何 我仍然可以安全地使用迭代器吗 为了避免混淆 以下是我讨论的操作顺序 获取集合的迭代器 修改集合 显然 不是其中的元素 而是集合本身 使用
  • 指针 (*argv[]) 的指针的指针算术?

    我知道foo bar 等于 foo bar 但是什么是 foo bar 等于 例如访问 argv 2 我对这一点的理解有些困惑 我认为可能是这样的 foo bar 但我不确定 如果这是一个简单的答案 我深表歉意 a b 相当于 a b 由于
  • 多线程文件写入

    我正在尝试使用多个线程写入大文件的不同部分 就像分段文件下载器所做的那样 我的问题是 执行此操作的安全方法是什么 我是否打开文件进行写入 创建线程 将 Stream 对象传递给每个线程 我不希望发生错误 因为多个线程可能同时访问同一个对象
  • 在 C 中打印字符串的所有排列

    我正在学习回溯和递归 并且我陷入了打印字符串所有排列的算法 我用以下方法解决了它贝尔算法 http programminggeeks com bell algorithm for permutation 用于排列 但我无法理解递归方法 我在

随机推荐