在上一篇博客【
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。
如果你需要更详细的帮助,请提供更多的上下文信息,例如你使用的开发环境、操作系统等。