vba ajax获取json,在Excel VBA中解析JSON

小编典典

如果要在的基础上构建ScriptControl,则可以添加一些帮助程序方法以获取所需的信息。该JScriptTypeInfo对象有点不幸:它包含所有相关信息(如您在“

监视” 窗口中看到的那样),但似乎无法使用VBA来实现。但是,JavaScript引擎可以帮助我们:

Option Explicit

Private ScriptEngine As ScriptControl

Public Sub InitScriptEngine()

Set ScriptEngine = New ScriptControl

ScriptEngine.Language = "JScript"

ScriptEngine.AddCode "function getProperty(jsonObj, propertyName) { return jsonObj[propertyName]; } "

ScriptEngine.AddCode "function getKeys(jsonObj) { var keys = new Array(); for (var i in jsonObj) { keys.push(i); } return keys; } "

End Sub

Public Function DecodeJsonString(ByVal JsonString As String)

Set DecodeJsonString = ScriptEngine.Eval("(" + JsonString + ")")

End Function

Public Function GetProperty(ByVal JsonObject As Object, ByVal propertyName As String) As Variant

GetProperty = ScriptEngine.Run("getProperty", JsonObject, propertyName)

End Function

Public Function GetObjectProperty(ByVal JsonObject As Object, ByVal propertyName As String) As Object

Set GetObjectProperty = ScriptEngine.Run("getProperty", JsonObject, propertyName)

End Function

Public Function GetKeys(ByVal JsonObject As Object) As String()

Dim Length As Integer

Dim KeysArray() As String

Dim KeysObject As Object

Dim Index As Integer

Dim Key As Variant

Set KeysObject = ScriptEngine.Run("getKeys", JsonObject)

Length = GetProperty(KeysObject, "length")

ReDim KeysArray(Length - 1)

Index = 0

For Each Key In KeysObject

KeysArray(Index) = Key

Index = Index + 1

Next

GetKeys = KeysArray

End Function

Public Sub TestJsonAccess()

Dim JsonString As String

Dim JsonObject As Object

Dim Keys() As String

Dim Value As Variant

Dim j As Variant

InitScriptEngine

JsonString = "{""key1"": ""val1"", ""key2"": { ""key3"": ""val3"" } }"

Set JsonObject = DecodeJsonString(CStr(JsonString))

Keys = GetKeys(JsonObject)

Value = GetProperty(JsonObject, "key1")

Set Value = GetObjectProperty(JsonObject, "key2")

End Sub

一些注意事项:

如果JScriptTypeInfo实例引用Javascript对象,For Each ... Next将无法正常工作。但是,如果它引用Javascript数组,则它确实起作用(请参见GetKeys函数)。

名称仅在运行时已知的访问属性使用函数GetProperty和GetObjectProperty。

JavaScript的阵列提供性能length,0,Item 0,1,Item 1等有了VBA点符号(jsonObject.property),只有length属性访问,则只有声明一个变量叫length所有的小写字母。否则,案例将不匹配,并且找不到。其他属性在VBA中无效。因此最好使用该GetProperty功能。

该代码使用早期绑定。因此,您必须添加对“ Microsoft Script Control 1.0”的引用。

InitScriptEngine在使用其他功能进行一些基本初始化之前,您必须调用一次。

2020-07-27

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值