VBA中使用JavaScript脚本语言解析JSON数据

2019-3-25 >> 商标_网站_软件

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


复制代码

 1 Sub TestJson()

 2 Dim jsstr As String

 3 

 4 'vb搞个字符串要加n个引号,真是烦人

 5 jsstr = "{""系别"":""历史系"",""班级"":""一班""," & _

 6          """学员"":[{""姓名"":""张三"",""年龄"":25,""性别"":""男""}," & _

 7                    "{""姓名"":""李四"",""年龄"":20,""性别"":""男""}," & _

 8                    "{""姓名"":""小明"",""年龄"":20,""性别"":""女""}" & _

 9                   "]" & _

10          "}"

11         

12 '前期绑定方便使用智能提示

13 Dim scobj As New MSScriptControl.ScriptControl

14 Dim age As Integer

15 

16 'ScriptControl使用的脚本语言。除了js,也支持Vbscript

17 scobj.Language = "JavaScript"

18 

19 '往脚本里添加代码,参数是字符串

20 scobj.AddCode ("var query = " & jsstr)

21 

22 'JSON对象获取属性的表示方法:对象.属性

23 '属性的值如果是个包含多个对象的数组,可以使用索引表示取得对象:对象.属性[0]

24 'Eval是表达式求值

25 age = scobj.Eval("query.学员[2].年龄")

26 

27 Debug.Print "历史系一班的第3个学员的年龄是" & age & "岁"

28         

29 End Sub

复制代码

1、javascript是弱类型语言。定义变量的关键字是var


var x;

var y = 10 ;

var name = "张三" ;

2、Eval是表达式求值,参数是字符串,如果是解析一个JSON对象,最好是使用一对括号把文本包括住,这样可以避免语法错误。


var obj = eval ("(" + jsstr + ")");

3、CodeObject方法,暴露脚本对象给VB。(这个方法没摸透)


复制代码

 1 Sub TestJson2()

 2 Dim jsstr1 As String

 3 Dim jsstr2 As String

 4 jsstr1 = "{""姓名"":""张三"",""性别"":""男""}"

 5 jsstr2 = "{""姓名"":""小花"",""性别"":""女""}"

 6 

 7 Dim scobj As New MSScriptControl.ScriptControl

 8 scobj.Language = "JavaScript"

 9 scobj.AddCode ("var query1 = " & jsstr1)    'query1,query2分别是两个Javascript对象

10 scobj.AddCode ("var query2 = " & jsstr2)

11 'CallByName分别取出CodeObject中的query1、query2对象,并找到姓名属性的值

12 Debug.Print CallByName(CallByName(scobj.CodeObject, "query1", VbGet), "姓名", VbGet)

13 Debug.Print CallByName(CallByName(scobj.CodeObject, "query2", VbGet), "姓名", VbGet)

14 

15 End Sub

CallByName是VB中的方法。

通过本地窗口可以看到scobj对象和内部的codeobject

本条关键词: VBA中使用JavaScript脚本语言解析JSON数据;
显示全部

国内/国际商标注册

网站建设

手机网站设计

正版软件销售

:15657071883 |

15657071883

| QQ:519202802 | 微信:moodpa

      MDB密码分析

          关于Access97的密码破解,在很多的网站和杂志上都有过介绍。在这里我简单重复一下。在mdb文件第0x42字节处的13个字节分别与0x86,0xfb,0xec,0x37,0x5d,0x44,0x9c,…

      中国首家生鲜电商之死

          01中国首家生鲜电商之死当一个行业的鼻祖都以极其惨烈的方式轰然倒塌,这意味着什么?近期,多家媒体爆出生鲜电商鼻祖易果生鲜已经进入破产重组流程,包括主体公…

      如何判断页面是通过链接打开还是通过后退按钮返回打开的?

          window.performance.navigation.type属性可以帮我解决这个问题。window.performance是W3C性能小组引入的新的API,目前IE9以上的浏览器都支持。window.performanc…

      二维码跳转公众号

          工作和开发中常常碰到,需要生成一个二维码跳转到特定公众号和小程序的地方。而且特别容易混淆,下面总结和梳理一下。二维码跳转公众号。通过https://open.weixi…

      U盘文件被隐藏,找不到了

          U盘文件被隐藏是怎么回事  U盘文件被隐藏其实这是中了一种U盘病毒,它会恶意的将U盘中的文件夹隐藏起来,采用常规的方法,都无法打开查看。这种U盘病毒会把文件…
浙ICP备05078491号        商标注册 >>开始