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数据的更多相关文章

  1. [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢?   原因在于: ...

  2. OpenJDK源码研究笔记(十六):在Java中使用JavaScript脚本语言

    友情提示 本文主要参考了51CTO上的一篇文章,代码经过自己的模仿和整理,还算凑合. 本文中的代码注释比较多,不再过多解释. 更多用法,还是得看JDK的API或者看原文http://developer ...

  3. 使用原生javascript和jQuery解析json数据

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSONM文件中包含了关于“名称”和“值”的信息. 有时候我们需要读取JSON格式的数据文件,在jQuer ...

  4. javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    原因很简单:因为在js中{}表示一个语句块(代码段),所有加上"()"表示表达式

  5. JavaScript转换与解析JSON的方法

    在JavaScript中将JSON的字符串解析成JSON数据格式,一般有两种方式: 一种为使用eval()函数. 使用Function对象来进行返回解析. 使用eval函数来解析,jquery的eac ...

  6. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  7. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  8. Delphi中使用ISuperObject解析Json数据

    Java.Php等语言中都有成熟的框架来解析Json数据,可以让我们使用很少的代码就把格式化好的json数据转换成程序可识别的对象或者属性,同时delphi中也有这样的组件来实现此功能,即Isuper ...

  9. 2017.9.22 HTML学习总结--JavaScript脚本语言

    接上: 1.JavaScript脚本语言 定义:javascript是一种简单的脚本语言,可以在浏览器中直接运行, 是一种在浏览器端实现网页与客户交互的技术javascript代码可 以直接运行在ht ...

随机推荐

  1. response的Writer输出数据的问题

    package cn.itcast.response; import java.io.IOException; import java.io.OutputStream; import java.io. ...

  2. hover事件优化(延时操作)

    JQ的hover事件拓展 编写原因:当鼠标滑过某个带有hover事件的元素,但是仅仅是路过,并不是希望查看此部分内容的时候,效果不理想 $.fn.extend({ delayed : function ...

  3. C# 获取DataTable数据导出到Excel

    protected void ExportExcel(System.Data.DataTable dt) { ) return; Microsoft.Office.Interop.Excel.Appl ...

  4. Maven-001-初识及本地环境配置

    前段时间想对自己之前写的一些代码或者小工具,因为写的比较乱,因而想系统的管理一下自己学习 Java 时写的源码,经过多方请教.网上查询,最终决定使用 Maven 来管理自己写的代码. Maven 是一 ...

  5. lodash的源码(1)

    数组篇 1.compact,就是将数组中的false值去掉 function compact(array) { var index = -1, length = array ? array.lengt ...

  6. RDIFramework.NET 中多表关联查询分页实例

    RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...

  7. collectionView,tableView的细节处理

    1.设置collectionView的高度 1.1为什么要设置高度? collectionView是在tableView的footView里面 , tableView能滚动,collectionVie ...

  8. APP-SQLAP-10771:Could not reserve record (匹配PO时候)

    ,) SID, substr(C.SERIAL#,,) SERIAL#, substr(B.,) OBJ_NAME, C.STATUS, C.USERNAME, c.action, C.USER#, ...

  9. 2.1.5 计算机网络协议: TCP/IP

    应用程序阶段:妳打开浏览器,在浏览器上面输入网址列,按下 [Enter].此时网址列与相关数据会被浏览器包成一个数据, 并向下传给 TCP/IP 的应用层: 应用层:由应用层提供的 HTTP 通讯协议 ...

  10. Qt之自定义信号和槽函数

    自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...