【问题标题】:NewtonSoft JSON Loop Through JArrayNewtonSoft JSON 循环通过 JArray
【发布时间】:2018-03-13 20:14:24
【问题描述】:

我正在尝试遍历 JArray,但我在 for/next 循环中收到 msg is not declared 错误。

我的 JSON 格式是这样的...

{ "messages":[
      {
        "id": 123456789,
        "sender_id": 1236547890,
        "replied_to_id": null,
        "created_at": "2017/09/28 15:49:20 +0000",
        "network_id": 554477,
        "message_type": "update",
        "sender_type": "user",
        "url": "https://www.example.com",
        "web_url": "https://www.example.com/123456789",
        "group_id": 7418529,
        "body": {
          "urls": [
            "https://www.facebook.com/blah/blah/blah",
            "https://google.com/foo/bar"
          ],
          "parsed": "Sem, imperdiet voluptatibus. Molestias, gravida vehicula, irure suscipit. Dis facilisi laudantium recusandae necessitatibus dolor quaerat quisque! Lectus deserunt taciti magnis, a non eligendi similique? Exercitationem eius corporis. Faucibus eiusmod delectus voluptatum nascetur, alias doloremque sagittis, repellendus laudantium quae, iaculis, cras maecenas fusce suspendisse amet magnam nulla gravida mollis, tempora gravida",
          "plain": "Sem, imperdiet voluptatibus. Molestias, gravida vehicula, irure suscipit. Dis facilisi laudantium recusandae necessitatibus dolor quaerat quisque! Lectus deserunt taciti magnis, a non eligendi similique? Exercitationem eius corporis. Faucibus eiusmod delectus voluptatum nascetur, alias doloremque sagittis, repellendus laudantium quae, iaculis, cras maecenas fusce suspendisse amet magnam nulla gravida mollis, tempora gravida",
          "rich": "Sem, imperdiet voluptatibus. Molestias, gravida vehicula, irure suscipit. Dis facilisi laudantium recusandae necessitatibus dolor quaerat quisque! Lectus deserunt taciti magnis, a non eligendi similique? Exercitationem eius corporis. Faucibus eiusmod delectus voluptatum nascetur, alias doloremque sagittis, repellendus laudantium quae, iaculis, cras maecenas fusce suspendisse amet magnam nulla gravida mollis, tempora gravida"
        },
        "thread_id": 956818730,
        "client_type": "Zapier",
        "client_url": "https://zapier.com/zapbook/example/",
        "system_message": false,
        "direct_message": false,
        "chat_client_sequence": null,
        "language": "en",
        "notified_user_ids": [],
        "privacy": "public",
        "attachments": [],
        "liked_by": {
          "count": 0,
          "names": []
        },
        "content_excerpt": "Sem, imperdiet voluptatibus. Molestias, gravida vehicula, irure suscipit. Dis facilisi laudantium recusandae necessitatibus dolor quaerat quisque! Lectus deserunt taciti magnis, a non eligendi similique? Exercitationem eius corporis. Faucibus eiusmod delectus voluptatum nascetur, alias doloremque sagittis, repellendus laudantium quae, iaculis, cras maecenas fusce suspendisse amet magnam nulla gravida mollis, tempora gravida",
        "group_created_id": 7418529
      },
      {
        "id": 987654321,
        "sender_id": 3214569870,
        "replied_to_id": 123555777,
        "created_at": "2017/09/28 15:28:28 +0000",
        "network_id": 554477,
        "message_type": "update",
        "sender_type": "user",
        "url": "https://www.example.com",
        "web_url": "https://www.example.com/987654321",
        "body": {
          "parsed": "Veniam quasi sem, neque netus? Eos quae voluptatibus autem optio varius euismod voluptas, voluptatum inventore",
          "plain": "Veniam quasi sem, neque netus? Eos quae voluptatibus autem optio varius euismod voluptas, voluptatum inventore",
          "rich": "Veniam quasi sem, neque netus? Eos quae voluptatibus autem optio varius euismod voluptas, voluptatum inventore"
        },
        "thread_id": 956224600,
        "client_type": "Web",
        "client_url": "https://www.example.com/",
        "system_message": false,
        "direct_message": false,
        "chat_client_sequence": null,
        "language": "en",
        "notified_user_ids": [],
        "privacy": "public",
        "attachments": [],
        "liked_by": {
          "count": 0,
          "names": []
        },
        "content_excerpt": "Veniam quasi sem, neque netus? Eos quae voluptatibus autem optio varius euismod voluptas, voluptatum inventore",
        "group_created_id": null
      }
    ]}

这是我试图用来循环 JArray 的代码...

Dim jObj As JObject = JObject.Parse(File.ReadAllText(outputJSONpath & "myFile.json"))
Dim jArr As JArray = CType(jObj("messages"), JArray)
Dim i As Int32 = 0
For Each msg As JObject In jArr 
    Dim threadID = msg.GetValue("thread_ID")
    'Do Work
Next

当我执行jArr.Count 时,它返回 6,341。为什么没有声明味精?如何获取 6,341 msg 中每个 msg 的 thread_ID 值?

【问题讨论】:

标签: asp.net json vb.net json.net


【解决方案1】:

我不确定您所说的 msg 未被声明是什么意思——它肯定是在您的 For Each 循环中声明的。听起来数组中的一个或多个消息项实际上可能是null 或不是JObject。在尝试使用它之前,您可能需要更加防御性地编写代码并检查 null 以及您得到的 JToken 的类型是否是您所期望的。与 thread_ID 值类似。也许是这样的:

For Each msg As JToken In jArr

    If Not msg Is Nothing AndAlso msg.Type = JTokenType.Object Then

        Dim threadID As JToken = msg("thread_ID")
        If Not threadID Is Nothing AndAlso threadID.Type = JTokenType.Integer Then

            Dim id As Integer = CType(threadID, Integer)

            '... Do something with id
            Console.WriteLine(id)

        End If

    End If

Next

更新

好的,我知道现在是什么问题了。当您在JToken 上使用GetValue() 或索引器语法(即msg("thread_ID"))时,属性名称区分大小写。在您的代码中,您有 thread_ID,但在 JSON 中是 thread_id,因此代码永远找不到它。

变化:

Dim threadID As JToken = msg("thread_ID")

收件人:

Dim threadID As JToken = msg("thread_id")

它应该可以工作。

【讨论】:

  • 感谢@BrianRogers。 thread_ID 可能为 null,这就是为什么我没有强制转换它。稍后在我的代码中检查它是否为空后,我使用 CInt(threadID) 对其进行了隐藏。但是,我的问题是在那之前......我没有声明味精。没有 msg 就没有 thread_ID。
  • 您收到的消息的实际文本是什么? msg 绝对是在你的代码中声明的——它就在你的 For Each 循环中。 msg 本身实际上是空的吗?也许您只需要在 For Each 循环中对其进行空检查?
  • 感谢您的努力!它永远不会通过 If Not threadID is nothing 测试。也就是每次 threadID 都是“无”。我应该指出的情况并非如此。
  • 你能显示你正在尝试读取的实际 JSON 吗?您在问题中显示的极其简短的 JSON 片段根本不包含 thread_ID 值;它只有id。 (如果 JSON 太大而无法包含在问题中,您能否将其缩减为重现问题的示例,然后将其包含在内?)
  • 我扩展了示例 JSON。我不得不匿名化数据,但结构是合法的。
猜你喜欢
  • 2014-08-11
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多