No Excel VBA no Windows, como fazer um loop através de uma matriz JSON analisada?
respondendo minha própria pergunta aqui.
Eu já trabalhei com JSON no Excel VBA e descobri muitas descobertas que serão feitas no formato de perguntas e respostashttps://stackoverflow.com/help/self-answer http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/
Portanto, em outras partes do stackoverflow, é possível ver perguntas sobre a análise do JSON no VBA, mas elas parecem faltar um truque ou dois.
Para começar, evito usar bibliotecas de análise JSON personalizadas e, em vez disso, uso o método Eval do ScriptControl como base de todo o meu código JSON. E também expressamos uma preferência pelas soluções nativas da Microsoft.
Aqui está uma pergunta anteriorNo Excel VBA no Windows, como atenuar o problema da passagem de sintaxe de ponto do JSON analisado, quebrado pelo comportamento de capitalização do IDE? sobre o qual esta questão se baseia. Ele mostra como o uso do VBA.CallByName é mais robusto do que a sintaxe do ponto para atravessar um objeto JSON analisado.
Nesta pergunta, é perguntado como atravessar uma matriz JSON analisada. Em primeiro lugar, aqui está uma abordagem miniscrita com uma dica de chapéu para ozmikehttps://stackoverflow.com/users/334106/ozmike
'Tools->References->
'Microsoft Script Control 1.0; {0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}; C:\Windows\SysWOW64\msscript.ocx
Private Sub TestJSONParsingArrayWithMiniScript()
'Hat tip to ozmike https://stackoverflow.com/users/334106/ozmike
'Based on https://stackoverflow.com/questions/5773683/excel-vba-parsed-json-object-loop#19359035
Dim oScriptEngine As ScriptControl
Set oScriptEngine = New ScriptControl
oScriptEngine.Language = "JScript"
oScriptEngine.AddCode "Object.prototype.myitem=function( i ) { return this[i] } ; "
Dim sJsonString As String
sJsonString = "[ 1234, 2345 ]"
Dim objJSON As Object
Set objJSON = oScriptEngine.Eval("(" + sJsonString + ")")
Debug.Assert objJSON.myitem(0) = 1234
Debug.Assert objJSON.myitem(1) = 2345
End Sub
Mas acredite ou não, VBA.CallByName pode ser usado nativamente, não apenas para obter o comprimento de uma matriz, mas também para acessar elementos. Ver resposta.
Esta é a pergunta 2 da série de 5. Aqui está a série completa
Q2No Excel VBA no Windows, como fazer um loop através de uma matriz JSON analisada?
Q5No Excel VBA no Windows, para variáveis JSON analisadas, o que é esse JScriptTypeInfo?