En Excel VBA en Windows, ¿cómo recorrer un conjunto JSON analizado?
respondiendo mi propia pregunta aquí.
He realizado algunos trabajos con JSON en Excel VBA y muchos resultados para publicar, lo que haré en formato de preguntas y respuestashttps://stackoverflow.com/help/self-answer http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/
Entonces, en otra parte de stackoverflow, uno puede ver preguntas sobre el análisis de JSON en VBA, pero parece que pierden uno o dos trucos.
Para empezar, evito usar bibliotecas de análisis JSON personalizadas y en su lugar uso el método Eval de ScriptControl como base de todo mi código JSON. Y también expresamos una preferencia de las soluciones nativas de Microsoft.
Aquí hay una pregunta previaEn Excel VBA en Windows, ¿cómo mitigar el problema del cruce de sintaxis de puntos de JSON analizado roto por el comportamiento de capitalización de IDE? sobre el cual se construye esta pregunta. Muestra cómo usar VBA.CallByName es más robusto que usar la sintaxis de puntos para atravesar un objeto JSON analizado.
En esta pregunta, se pregunta cómo atravesar una matriz JSON analizada. En primer lugar, aquí hay un enfoque en miniscript con una punta de sombrero 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
Pero créalo o no, VBA.CallByName se puede usar de forma nativa no solo para obtener la longitud de una matriz sino también para acceder a los elementos. Ver respuesta.
Esta es la pregunta 2 de la serie de 5. Aquí está la serie completa
Q2En Excel VBA en Windows, ¿cómo recorrer un conjunto JSON analizado?