以下の例では...解析された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スクリプトは含まれていません(これは機能する可能性がありますが、Excelにロードする方法がわからず、最小限のドキュメントがあります)。
また、多次元で解析されたJSON配列にアクセスすることは可能ですか?基本的なキー/値配列ループを機能させるだけで素晴らしいでしょう(質問が多すぎる場合は申し訳ありません)。ありがとう。
編集:vba-jsonライブラリを使用した2つの実用的な例を次に示します。上記の質問はまだ謎です...
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