在上一篇博客【 VBA解析JSON数据(3)–JavaScript 】讲到VBA无法直接获取 Variant/Object/JScriptTypeInfo 对象中的Key,这个难题如何解决呢?
解铃还须系铃人,既然是JavaScript的对象,那么自然还是需要在JavaScript中寻求解决方法。
示例JSON数据如下所示。

"applySn": "粤G妆网备字2017050113", "applySnTT": "", "apply_enter_address": "", "enterpriseName": "广州市金日精细化工有限公司", "enterpriseNameTT": "", "is_off": "N", "newProcessid": "20170421153208vq3fu", "off_date": "", "org_name": "", "processid": "20170421153208vq3fu", "productName": "悠莅雅柔美亮肤按摩霜", "productNameTT": "", "provinceConfirm": "2017-05-17"

示例代码如下。

Public Sub JSON_JS_Plus()
    Dim strJSON As String
    Dim objJSON As Object
    Dim arrKeys() As String
    Dim Value As Variant
    Dim j As Integer, k
    Dim strJSCode As String
    Dim objKeys As Object
    Dim intKeyLen As Integer
    With CreateObject("MSScriptControl.ScriptControl")
        .Language = "javascript"
        strJSCode = "function JSGetValue(jsonObj,strKey){return jsonObj[strKey];}"
        strJSCode = strJSCode & " function JSGetKeys(jsonObj){var keys=new Array();for(var key in jsonObj){keys.push(key);}return keys;} "
        .AddCode strJSCode
        strJSON = [a1]
        Set objJSON = .Eval("(" + strJSON + ")")
        Set objKeys = .Run("JSGetKeys", objJSON)
        intKeyLen = .Run("JSGetValue", objKeys, "length")
        ReDim arrKeys(intKeyLen - 1)
        j = 0
        For Each k In objKeys
            arrKeys(j) = k
            j = j + 1
        Range("A3:B3").Value = Array("Name", "Value")
        j = 4
        For Each k In arrKeys
            Cells(j, 1).Value = k
            Cells(j, 2).Value = .Run("JSGetValue", objJSON, k)
            j = j + 1
    End With
End Sub

代码解析
第10行代码使用后期绑定的方式创建ScriptControl对象,如果使用前期绑定方式,需要在VBE中先引用Microsoft Script Control 1.0
第11行代码指定ScriptControl对象的语言为JavaScript。
第12行代码为JS代码过程JSGetValue,用于提取JSON对象中的VALUE。
第13行代码为JS代码过程JSGetKeys,用于提取JSON对象中的KEY。

为了简化代码,VBA代码中使用了JavaScript Minify格式,格式化的JavaScript代码如下:

function JSGetValue(jsonObj, strKey) {
    return jsonObj[strKey];
function JSGetKeys(jsonObj) {
    var keys = new Array();
    for (var key in jsonObj) {
        keys.push(key);
    return keys;

第14行为ScriptControl对象添加代码。
第16行代码将JSON字符串转换JScriptTypeInfo对象。
第17行代码调用过程JSGetKeys提取KEY。
第21行到第23行代码使用循环过程将KEY保存到数组arrKeys中。
第27行到第28行代码使用循环过程读取KEY对应的VALUE。

运行示例代码,结果如下。
在这里插入图片描述
世上无难事,问题总会能够解决的。

相关博文链接:
VBA解析JSON数据(1)-- Split函数
VBA解析JSON数据(2)–正则表达式
VBA解析JSON数据(3)–JavaScript
VBA解析JSON数据(4)–JavaScript进阶
VBA解析JSON数据(5)–JavaScript回写Excel

在上一篇博客【VBA解析JSON数据(3)–JavaScript】讲VBA无法直接获取Variant/Object/JScriptTypeInfo对象中的Key,这个难题如何解决呢?解铃还须系铃人,既然是JavaScript的对象,那么自然还是需要在JavaScript中寻求解决方法。示例JSON数据如下所示。{ "applySn": "粤G妆网备字20170501
VBA-JSON VBA(Windows和Mac Excel,Access和其他Office应用程序)的JSON转换和解析。 它出色的项目 ,并进行了添加和改进以解决错误和提高性能(作为一部分)。 在Windows Excel 2013和Excel for Mac 2011中进行了测试,但应适用于2007+。 对于仅Windows支持,请包含对“ Microsoft脚本运行时”的引用 对于Mac和Windows支持,包括 Dim Json As Object Set Json = JsonConverter.ParseJson( "{""a"":123,""b"":[1,2,3,4],""c"":{""d"":456}}" ) ' Json("a") -> 123 ' Json("b")(2) -> 2 ' Json("c")("d") -> 456 Json( "c" )(
JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java,JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。 JsonPath与Xpath用法对比 Java使用Jsonpath解析json数据 Js获取Json每个节点的JsonPath 将输出结果转换成树形结构 1.JsonPath与Xpath用法对比 XPath JSONPath "applySn": "粤G妆网备字2017050113", "applySnTT": "", &quo
Dim from_string As String, convert_numbers As String Dim i, j, k, m, first_number_location Dim i1 As String Dim check_start(9) As String, check 1.支持跨语言的变量、函数、过程; 1.1VBS所有的数字类型自动转换为JS的Number类型; 1.2VBS数组,在JS中自动包装为VBArray对象,类型为unknown;可用其toArray方法转换为JS的数组 1.3VBS类型=&g...
什么是JSON? JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子集,它使用完全独立于任何编程语言的文本格式来表示数据。 由于JSON天然具备了简洁和清晰的层次结构,易于机器解析和生成,从2005年前后开始JSON成为主流的网络数据传输格式。进行网页数据抓取的时候,...
这几天在word里面写宏,想解析服务器传过来的json串。但是Set oSC = CreateObjectx86("MSScriptControl.ScriptControl")这个方法一直创建不了对象。 最后再网上看到说,word分为32位的和64位的这个方法只有在32位的word里面才可以使用,在64位的里面是实现不了的(不能创建对象) 于是在网上找各种的方案解决。最后找到一个方法,自己重...
VBA-JSON 是一个用于在 VBA解析 JSON 格式数据的库。你可以在 GitHub 上找到它的源代码和文档。 如果你无法找到 VBA-JSON 库,可能是因为它的名称或位置发生了变化,或者你没有正确设置相关的环境变量或路径。你可以尝试使用其他的 JSON 解析库,例如 Microsoft 提供的 MSXML 或者 JsonConverter。 如果你需要更详细的帮助,请提供更多的上下文信息,例如你使用的开发环境、操作系统等。