В Excel VBA на Windows, как пройти через анализируемый массив JSON?
отвечая на мой собственный вопрос здесь.
Я проделал некоторую работу с JSON в Excel VBA и опубликовал множество выводов, которые я сделаю в формате вопросов и ответов.https://stackoverflow.com/help/self-answer http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/
Так что в другом месте на stackoverflow можно увидеть вопросы о синтаксическом анализе JSON в VBA, но они, кажется, пропускают хитрость или два.
Для начала я отказываюсь от использования пользовательских библиотек синтаксического анализа JSON и вместо этого использую метод Eval ScriptControl в качестве основы всего моего кода JSON. А также мы выражаем предпочтение родным решениям Microsoft.
Вот предыдущий вопросВ Excel VBA в Windows, как смягчить проблему точечного синтаксического анализа проанализированного JSON, нарушенного поведением заглавных букв в среде IDE? на котором строится этот вопрос. Он показывает, что использование VBA.CallByName более надежно, чем использование точечного синтаксиса для прохождения проанализированного объекта JSON.
В этом вопросе задается вопрос, как пройти проанализированный массив JSON. Во-первых, вот минискриптный подход с наконечником шляпы к озмикеhttps://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
Но, поверьте или нет, VBA.CallByName можно использовать изначально не только для получения длины массива, но и для доступа к элементам. Смотри ответ.
Это вопрос 2 из серии 5. Вот полная серия
Q2В Excel VBA на Windows, как пройти через анализируемый массив JSON?
Q5В Excel VBA для Windows, для проанализированных переменных JSON, что это за JScriptTypeInfo?