栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Excel VBA中解析JSON

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Excel VBA中解析JSON

如果要在的基础上构建

scriptControl
,则可以添加一些帮助程序方法以获取所需的信息。该
JscriptTypeInfo
对象有点不幸:它包含所有相关信息(如您在“
监视” 窗口中看到的那样),但似乎无法使用VBA来实现。但是,Javascript引擎可以帮助我们:

Option ExplicitPrivate scriptEngine As scriptControlPublic 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 SubPublic Function DepreJsonString(ByVal JsonString As String)    Set DepreJsonString = scriptEngine.eval("(" + JsonString + ")")End FunctionPublic Function GetProperty(ByVal JsonObject As Object, ByVal propertyName As String) As Variant    GetProperty = scriptEngine.Run("getProperty", JsonObject, propertyName)End FunctionPublic Function GetObjectProperty(ByVal JsonObject As Object, ByVal propertyName As String) As Object    Set GetObjectProperty = scriptEngine.Run("getProperty", JsonObject, propertyName)End FunctionPublic 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 = KeysArrayEnd FunctionPublic 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 = DepreJsonString(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
    在使用其他功能进行一些基本初始化之前,您必须调用一次。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号