按键精灵JSON数据取值全攻略:从基础到实战
在按键精灵的自动化脚本开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于接口返回数据、配置文件存储等场景,JSON数据的取值方法,是高效处理复杂数据、实现脚本逻辑的关键,本文将从JSON基础结构讲起,结合按键精灵的语法特性,详细介绍不同场景下的JSON取值技巧,并通过实例演示从简单到复杂的取值操作。
JSON基础:按键精灵中的“数据地图”
在开始取值前,先快速回顾JSON的核心结构——这是按键精灵处理JSON数据的“基础语法”,JSON数据由两种结构组成:
对象(Object):用“{}”表示,键值对集合
格式:{"键1": 值1, "键2": 值2, ...}
- 键(Key):必须是字符串,用双引号包裹;
- 值(Value):可以是字符串、数字、布尔值、数组、对象甚至null。
{"name": "张三", "age": 25, "isStudent": false, "scores": [90, 85, 78]}
数组(Array):用“[]”表示,有序值列表
格式:[值1, 值2, ...]
数组中的值可以是任意JSON数据类型(包括嵌套的对象或数组)。
[
{"id": 1, "product": "手机", "price": 2999},
{"id": 2, "product": "电脑", "price": 5999}
]
按键精灵中的JSON变量
在按键精灵中,JSON数据通常以字符串形式存在(如从接口返回的文本),需通过CreateObject("Scripting.Dictionary")或JsonParse函数(按键精灵10.0+支持)转换为可操作的对象。
Dim jsonStr
jsonStr = '{"name": "按键精灵", "version": "10.0"}'
' 方法1:使用JsonParse(推荐,语法更简洁)
Dim jsonObj
jsonObj = JsonParse(jsonStr)
' 方法2:使用Scripting.Dictionary(旧版本兼容)
' Set jsonObj = CreateObject("Scripting.Dictionary")
' jsonObj.Add "name", "按键精灵"
' jsonObj.Add "version", "10.0"
核心取值方法:从“键”到“路径”的精准定位
JSON取值的本质,是通过“键名”或“索引”逐层定位目标数据,按键精灵提供了多种取值方式,覆盖简单对象、嵌套对象、数组等不同场景。
简单对象取值:直接通过键名访问
对于最外层是“键值对”的JSON对象,取值语法为:jsonObj("键名")
示例:
假设有JSON数据:
{"user": "小明", "loginTime": "2023-10-01 12:00:00"}
按键精灵中取值:
Dim jsonStr, jsonObj, userName, loginTime
jsonStr = '{"user": "小明", "loginTime": "2023-10-01 12:00:00"}'
jsonObj = JsonParse(jsonStr)
' 取字符串值
userName = jsonObj("user") ' 结果:"小明"
loginTime = jsonObj("loginTime") ' 结果:"2023-10-01 12:00:00"
TracePrint "用户名:" & userName ' 输出到调试面板
嵌套对象取值:逐层“点”或“索引”穿透
当JSON对象中嵌套了其他对象时,需通过“外层键名.内层键名”的方式逐层访问,或用括号索引多层嵌套。
示例:
嵌套JSON数据:
{"info": {"name": "小红", "contact": {"phone": "13812345678", "email": "xiaohong@qq.com"}}}
按键精灵中取值:
Dim jsonStr, jsonObj, name, phone
jsonStr = '{"info": {"name": "小红", "contact": {"phone": "13812345678", "email": "xiaohong@qq.com"}}}'
jsonObj = JsonParse(jsonStr)
' 方法1:逐层用点号连接(推荐,可读性强)
name = jsonObj("info")("name") ' 先取"info"对象,再取"name"键
phone = jsonObj("info")("contact")("phone") ' 结果:"13812345678"
' 方法2:用括号索引多层(等价写法)
phone = jsonObj("info.contact.phone") ' 按键精灵支持直接用点号路径
TracePrint "姓名:" & name & ",电话:" & phone
数组取值:通过索引定位元素
JSON数组中的元素通过索引访问(索引从0开始),语法为:jsonObj("数组键名")(索引) 或直接jsonObj(索引)(如果jsonObj本身是数组)。
示例1:外层数组
[{"id": 1, "name": "商品A"}, {"id": 2, "name": "商品B"}]
按键精灵中取值:
Dim jsonStr, jsonObj, product1, product2
jsonStr = '[{"id": 1, "name": "商品A"}, {"id": 2, "name": "商品B"}]'
jsonObj = JsonParse(jsonStr)
' 取第一个商品(索引0)
product1 = jsonObj(0)("name") ' 结果:"商品A"
' 取第二个商品(索引1)
product2 = jsonObj(1)("name") ' 结果:"商品B"
TracePrint "商品1:" & product1 & ",商品2:" & product2
示例2:对象中的数组
{"students": [{"name": "小张", "score": 90}, {"name": "小李", "score": 85}]}
按键精灵中取值:
Dim jsonStr, jsonObj, student1Name, student2Score
jsonStr = '{"students": [{"name": "小张", "score": 90}, {"name": "小李", "score": 85}]}'
jsonObj = JsonParse(jsonStr)
' 取第一个学生的姓名
student1Name = jsonObj("students")(0)("name") ' 结果:"小张"
' 取第二个学生的分数
student2Score = jsonObj("students")(1)("score") ' 结果:85
TracePrint "学生1姓名:" & student1Name & ",学生2分数:" & student2Score
复杂嵌套:数组+对象的混合取值
实际场景中,JSON数据常包含“数组嵌套对象+对象嵌套数组”的复杂结构,此时需结合索引和键名逐层定位。
示例:
{
"class": "三年二班",
"students": [
{"name": "小王", "scores": [80, 85, 90]},
{"name": "小刘", "scores": [95, 88, 92]}
]
}
目标:取“小刘”的第二次成绩(即数组中第二个对象的scores数组的第1个元素)。
按键精灵中取值:
Dim jsonStr, jsonObj, liuSecondScore
jsonStr = '{"class": "三年二班", "students": [{"name": "小王", "scores": [80, 85, 90]}, {"name": "小刘", "scores": [95, 88, 92]}]}'
jsonObj = JsonParse(jsonStr)
' 定位步骤:students[1](第二个学生)→ scores[1](第二次成绩)
liuSecondScore = jsonObj("students")(1)("scores")(1) ' 结果:88
TracePrint "小刘的第二次成绩:" & liuSecondScore
进阶技巧:动态取值与错误处理
实际脚本开发中,JSON数据的结构可能动态变化(如接口返回的字段不确定),或取值时可能遇到键名不存在、索引越界等问题,此时需结合动态取值和错误处理机制。
动态取值:通过变量存储键名或索引
当键名或索引需要动态指定时(如循环遍历数组),可将键名/索引存入变量,再通过变量取值。
示例:遍历数组并打印所有学生姓名
Dim jsonStr, jsonObj, students, i, studentName
jsonStr = '{"students": [{"name": "小张"}, {"name": "小李"}, {"name": "小王"}]}'
jsonObj = JsonParse(jsonStr)
students = jsonObj("students") ' 取学生数组
' 循环遍历数组


还没有评论,来说两句吧...