2017-10-02 3 views
0

JArray를 통해 루프를 시도하고 있는데 for/next 루프 내에서 msg가 선언되지 않았습니다. 여기 NewtonSoft JSON Loop Through JArray

{ "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을 통해 루프를 사용하려고 시도하고있어 코드의

내 JSON이 같은 형식입니다 ... ... 나는 그것을 jArr.Count

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 

6,341을 반환합니다. msg가 선언되지 않은 이유는 무엇입니까? 내 6,341 메시지마다 thread_ID 값을 얻으려면 어떻게해야합니까?

+0

다시 안녕하세요 :) 메시지 유형을 추측 해보십시오. https://stackoverflow.com/questions/5678909/is-vbs-dim-the-same-as-cs-var – hardkoded

+0

제안 해 주셔서 감사합니다. 나는 Option Infer On을 시도했다. msg는 여전히 선언되지 않았습니다. – s15199d

답변

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 

업데이트

OK, 나는 문제가 지금 무엇을 참조하십시오. GetValue() 또는 인덱서 구문 (msg("thread_ID"))을 JToken에 사용하는 경우 속성 이름은 대/소문자를 구분합니다. 코드에는 thread_ID이 있지만 JSON에서는 thread_id이므로 코드에서 찾을 수 없습니다.

변경 :

Dim threadID As JToken = msg("thread_id") 

하고 작동합니다 :

Dim threadID As JToken = msg("thread_ID") 

에.

+0

감사합니다. @BrianRogers. thread_ID는 null 일 가능성이 있으므로 그 이유는 무엇입니까? 나중에 그것이 null인지 확인한 후 내 코드에서 CInt (threadID)를 사용하여 비밀리에 처리합니다. 하지만, 내 문제는 그 전에 ... 나는 메시지가 선언되지지고 있어요. msg가 없으면 thread_ID가 없습니다. – s15199d

+0

받고있는 메시지의 실제 텍스트는 무엇입니까? 'msg'는 여러분의 코드에서 가장 명확하게 선언되었습니다. 바로'For Each' 루프에 있습니다. 'msg' 자체는 실제로 null입니까? 아마도 For Each 루프 내부에서 널 체크 만하면 될까요? –

+0

노력에 감사드립니다! 그것은 통과하지 못한다면 ThreadID는 아무것도 테스트하지 않습니다. 일명 threadID는 "nothing"입니다. 내가 지적해야 할 것은 사실이 아닙니다. – s15199d