В соответствии с приведенным ниже примером... Циклирование объекта из разбора строки JSON возвращает ошибку "Объект не поддерживает это свойство или метод". Может ли кто-нибудь посоветовать, как сделать эту работу? Большое спасибо (я потратил 6 часов на поиск ответа, прежде чем спрашивать здесь).
Функция для разбора строки JSON в объект (это работает нормально).
Function jsonDecode(jsonString As Variant)
Set sc = CreateObject("ScriptControl"): sc.Language = "JScript"
Set jsonDecode = sc.Eval("(" + jsonString + ")")
End Function
Цитирование через обработанный объект возвращает ошибку "Объект не поддерживает это свойство или метод".
Sub TestJsonParsing()
Dim arr As Object 'Parse the json array into here
Dim jsonString As String
'This works fine
jsonString = "{'key1':'value1','key2':'value2'}"
Set arr = jsonDecode(jsonString)
MsgBox arr.key1 'Works (as long as I know the key name)
'But this loop doesn't work - what am I doing wrong?
For Each keyName In arr.keys 'Excel errors out here "Object doesn't support this property or method"
MsgBox "keyName=" & keyName
MsgBox "keyValue=" & arr(keyName)
Next
End Sub
PS. Я уже заглянул в эти библиотеки:
- vba-json Не удалось заставить этот пример работать.
- VBJSON Там нет vba script (это может работать, но не знает, как загрузить его в Excel, и существует минимальная документация).
Кроме того, возможно ли получить доступ к многомерным разборным массивам JSON? Просто получить одномерный цикл массива работать будет здорово (извините, если слишком много). Благодарю.
Изменить: Вот два рабочих примера с использованием библиотеки vba-json. Вопрос выше все еще остается загадкой, хотя...
Sub TestJsonDecode() 'This works, uses vba-json library
Dim lib As New JSONLib 'Instantiate JSON class object
Dim jsonParsedObj As Object 'Not needed
jsonString = "{'key1':'val1','key2':'val2'}"
Set jsonParsedObj = lib.parse(CStr(jsonString))
For Each keyName In jsonParsedObj.keys
MsgBox "Keyname=" & keyName & "//Value=" & jsonParsedObj(keyName)
Next
Set jsonParsedObj = Nothing
Set lib = Nothing
End Sub
Sub TestJsonEncode() 'This works, uses vba-json library
Dim lib As New JSONLib 'Instantiate JSON class object
Set arr = CreateObject("Scripting.Dictionary")
arr("key1") = "val1"
arr("key2") = "val2"
MsgBox lib.toString(arr)
End Sub