VBA解析JSON数据(4)--JavaScript进阶

163 篇文章 16 订阅
56 篇文章 4 订阅

在上一篇博客【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
        Next
        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
        Next
    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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值