VBA中使用JavaScript脚本语言解析JSON数据
JSON:JavaScript 对象表示法(JavaScript Object Notation)
和xml相似,都是文本形式(保存在文本文件中或字符串等形式),比如:
jsstr = {"系别":"历史系","班级":"一班",
"学员":[
{"姓名":"张三","年龄":25,"性别":"男"},
{"姓名":"李四","年龄":20,"性别":"男"},
{"姓名":"小明","年龄":20,"性别":"女"}
]
}
1、{}表示对象,[]表示数组,数组的成员可以是对象,对象的属性和值用“属性:值”键值对形式表示。
本例中jsstr对象有三个属性:系别,班级,学员。其中“学员”属性的值是一个包含三名学员对象的数组,
2、相对XML更轻量,xml的标签比数据还要多。
在VBA中可以使用Javascript解析json对象:
先引用Microsoft Script Control 1.0,文件是:msscript.ocx
Sub TestJson()
Dim jsstr As String 'vb搞个字符串要加n个引号,真是烦人
jsstr = "{""系别"":""历史系"",""班级"":""一班""," & _
"""学员"":[{""姓名"":""张三"",""年龄"":25,""性别"":""男""}," & _
"{""姓名"":""李四"",""年龄"":20,""性别"":""男""}," & _
"{""姓名"":""小明"",""年龄"":20,""性别"":""女""}" & _
"]" & _
"}" '前期绑定方便使用智能提示
Dim scobj As New MSScriptControl.ScriptControl
Dim age As Integer 'ScriptControl使用的脚本语言。除了js,也支持Vbscript
scobj.Language = "JavaScript" '往脚本里添加代码,参数是字符串
scobj.AddCode ("var query = " & jsstr) 'JSON对象获取属性的表示方法:对象.属性
'属性的值如果是个包含多个对象的数组,可以使用索引表示取得对象:对象.属性[0]
'Eval是表达式求值
age = scobj.Eval("query.学员[2].年龄") Debug.Print "历史系一班的第3个学员的年龄是" & age & "岁" End Sub
1、javascript是弱类型语言。定义变量的关键字是var
var x;
var y = 10 ;
var name = "张三" ;
2、Eval是表达式求值,参数是字符串,如果是解析一个JSON对象,最好是使用一对括号把文本包括住,这样可以避免语法错误。
var obj = eval ("(" + jsstr + ")");
3、CodeObject方法,暴露脚本对象给VB。(这个方法没摸透)
Sub TestJson2()
Dim jsstr1 As String
Dim jsstr2 As String
jsstr1 = "{""姓名"":""张三"",""性别"":""男""}"
jsstr2 = "{""姓名"":""小花"",""性别"":""女""}" Dim scobj As New MSScriptControl.ScriptControl
scobj.Language = "JavaScript"
scobj.AddCode ("var query1 = " & jsstr1) 'query1,query2分别是两个Javascript对象
scobj.AddCode ("var query2 = " & jsstr2)
11 'CallByName分别取出CodeObject中的query1、query2对象,并找到姓名属性的值
Debug.Print CallByName(CallByName(scobj.CodeObject, "query1", VbGet), "姓名", VbGet)
Debug.Print CallByName(CallByName(scobj.CodeObject, "query2", VbGet), "姓名", VbGet) End Sub
CallByName是VB中的方法。
通过本地窗口可以看到scobj对象和内部的codeobject
VBA中使用JavaScript脚本语言解析JSON数据的更多相关文章
- [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢? 原因在于: ...
- OpenJDK源码研究笔记(十六):在Java中使用JavaScript脚本语言
友情提示 本文主要参考了51CTO上的一篇文章,代码经过自己的模仿和整理,还算凑合. 本文中的代码注释比较多,不再过多解释. 更多用法,还是得看JDK的API或者看原文http://developer ...
- 使用原生javascript和jQuery解析json数据
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSONM文件中包含了关于“名称”和“值”的信息. 有时候我们需要读取JSON格式的数据文件,在jQuer ...
- javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
原因很简单:因为在js中{}表示一个语句块(代码段),所有加上"()"表示表达式
- JavaScript转换与解析JSON的方法
在JavaScript中将JSON的字符串解析成JSON数据格式,一般有两种方式: 一种为使用eval()函数. 使用Function对象来进行返回解析. 使用eval函数来解析,jquery的eac ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- .NET中常用的几种解析JSON方法
一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...
- Delphi中使用ISuperObject解析Json数据
Java.Php等语言中都有成熟的框架来解析Json数据,可以让我们使用很少的代码就把格式化好的json数据转换成程序可识别的对象或者属性,同时delphi中也有这样的组件来实现此功能,即Isuper ...
- 2017.9.22 HTML学习总结--JavaScript脚本语言
接上: 1.JavaScript脚本语言 定义:javascript是一种简单的脚本语言,可以在浏览器中直接运行, 是一种在浏览器端实现网页与客户交互的技术javascript代码可 以直接运行在ht ...
随机推荐
- IIS应用程序池最大进程数设置
1.当工作进程数>1时,如果有多个连接请求就会启动多个工作进程实例来处理,所启动的最多工作进程数就是你设置的最大进程数,后续更多的连接请求会循环的发送至不同的工作进程来处理.每个工作进程都能承担 ...
- Markdown资源 markd
markdown是将某些格式的文本,翻译成HTML的一个库,非常精妙! https://www.npmjs.com/package/markedhttps://github.com/adam-p/ma ...
- 事务复制-大批量DEL操作
同事讨论删除发布表历史记录,导致订阅端数据滞后N小时.后来询问得知,发布表T只保留最近31天的数据,每天由Job删除31天前的数据,每天的删除量约400-500万条.默认情况下,在发布端删除400万条 ...
- CentOS 7 搭建 LNMP
一.安装httpd 1.yum install httpd -y 2.启动服务:systemctl start httpd 3.设置开机启动:systemctl enable 二.安装mariadb ...
- git如何使用 svn如何使用
git和svn是2款常用的版本控制系统. git 的功能: 1.从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上. 也就是说自己机器上有一个git仓库. 这和svn是不同的,svn是没有本 ...
- here was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
tomcat重启后报以下错误: 09-Dec-2016 10:57:49.150 WARNING [localhost-startStop-1] org.apache.catalina.webreso ...
- Hadoop+Spark:集群环境搭建
环境准备: 在虚拟机下,大家三台Linux ubuntu 14.04 server x64 系统(下载地址:http://releases.ubuntu.com/14.04.2/ubuntu-14.0 ...
- Linux下添加用户及用户组
创建用户组hdpgroup: $ sudo addgroup hdpgroup 如果用户hdp不存在,把hdp添加到hdpgroup用户组: $ sudo adduser --force -ingro ...
- 结合WebSocket编写WebGL综合场景示例
在WebGL场景中导入多个Babylon骨骼模型,在局域网用WebSocket实现多用户交互控制. 首先是场景截图: 上图在场景中导入一个Babylon骨骼模型,使用asdw.空格.鼠标控制加速度移动 ...
- paper 110:凸优化和非凸优化
数学中最优化问题的一般表述是求取,使,其中是n维向量,是的可行域,是上的实值函数.凸优化问题是指是闭合的凸集且是上的凸函数的最优化问题,这两个条件任一不满足则该问题即为非凸的最优化问题. 其中,是 凸 ...