Asp.net 通过JArray的NewtonSoft JSON循环

Asp.net 通过JArray的NewtonSoft JSON循环,asp.net,json,vb.net,json.net,Asp.net,Json,Vb.net,Json.net,我试图通过JArray循环,并且在for/next循环中得到msg is not declared error 我的JSON格式如下 { "messages":[ { "id": 123456789, "sender_id": 1236547890, "replied_to_id": null, "created_at": "2017/09/28 15:49:20 +0000", "network_id"

我试图通过JArray循环,并且在for/next循环中得到msg is not declared error

我的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
时,它返回6341。为什么味精没有申报?如何获得6341 msg中每个msg的thread_ID值?

我不确定未声明的
msg
是什么意思——它在每个
循环的
中声明得非常明确。听起来可能数组中的一个或多个消息项实际上可能是
null
,或者不是
JObject
。您可能需要更加防御性地编写代码,并检查null,以及您得到的
JToken
类型是否符合您在尝试使用它之前的预期。与
线程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(“线程ID”)
时,属性名称区分大小写。在代码中,您有
thread\u ID
,但在JSON中它是
thread\u ID
,因此代码永远找不到它

更改:

Dim threadID As JToken = msg("thread_ID")
致:


它应该可以工作。

Hi:)尝试推断msg类型,请参阅感谢您的建议。我试着推断。msg还没有声明。谢谢@BrianRogers。线程ID可能为空,这就是我没有强制转换它的原因。稍后在我的代码中,在检查它是否为null之后,我使用CInt(threadID)对其进行转换。但是,我的问题是在此之前…我得到的味精没有声明。没有消息,就没有线程ID。您收到的消息的实际文本是什么
msg
在您的代码中声明得最为明确——它就在每个
循环的
中。
msg
本身实际上是空的吗?也许您只需要对每个
循环的
内部进行空检查?我感谢您的努力!它永远不会通过If Not threadID is nothing测试。Aka每次threadID都是“无”。我应该指出的是事实并非如此。你能展示你试图阅读的实际JSON吗?您在问题中显示的极其简短的JSON片段根本不包含
thread\u ID
值;它只有
id
。(如果JSON太大,无法包含在问题中,您能否将其缩减为一个复制该问题的示例,然后将其包含在内?)我扩展了示例JSON。我不得不匿名化数据,但结构是合法的。
Dim threadID As JToken = msg("thread_id")