易语言中如何获取JSON成员文本
在易语言中处理JSON数据时,获取指定成员的文本值是常见需求,由于易语言本身不内置JSON解析功能,通常需要借助第三方扩展库(如“易语言JSON支持库”或第三方DLL)来实现,本文将以易语言常用的“JSON解析类”为例,详细讲解如何获取JSON成员的文本内容,涵盖基础操作、嵌套成员处理及异常场景应对。
准备工作:加载JSON解析库
在使用JSON功能前,需先加载支持JSON操作的易语言库,以“易语言JSON支持库”为例,首先在易语言编辑器顶部通过“程序”→“加入模块”或“引用易语言支持库”,添加“JSON解析支持库”(若未自带,可从易语言官网或第三方资源平台下载合规库),添加后,在代码声明区导入库:
.版本 2 .程序集 程序集1 .子程序 _启动子程序, , 公开 .局部变量 json解析器, JSON解析类 ' 初始化JSON解析器 json解析器.创建 ()
基础操作:获取顶层JSON成员文本
JSON数据本质是键值对的集合,顶层成员可通过“键名”直接获取文本值,假设有以下JSON字符串:
{
"name": "张三",
"age": 25,
"isStudent": false
}
在易语言中,可通过“取成员文本”或类似方法获取对应键的文本值:
.版本 2
.子程序 获取顶层成员文本, 文本型, 公开
.参数 json文本, 文本型, , 待解析的JSON字符串
.局部变量 json解析器, JSON解析类
.局部变量 结果文本, 文本型
' 初始化解析器并加载JSON文本
json解析器.创建 ()
json解析器.解析 (json文本)
' 获取"name"成员的文本值
结果文本 = json解析器.取成员文本 ("name")
调试输出 ("姓名:" + 结果文本) ' 输出:姓名:张三
' 获取"age"成员的文本值(注意:数字类型会被转为文本)
结果文本 = json解析器.取成员文本 ("age")
调试输出 ("年龄:" + 结果文本) ' 输出:年龄:25
' 获取"isStudent"成员的文本值(布尔值会转为"true"/"false"文本)
结果文本 = json解析器.取成员文本 ("isStudent")
调试输出 ("是否学生:" + 结果文本) ' 输出:是否学生:false
说明:
- 若成员不存在(如键名错误),易语言JSON库通常会返回空文本或触发异常,需结合“是否存在成员”方法预判断(如
json解析器.是否存在成员 ("键名"))。 - 数字、布尔值等非文本类型会被自动转为文本形式返回,若需原始类型(如数字25),需使用
取成员整数()、取成员布尔值()等方法。
进阶操作:获取嵌套JSON成员文本
当JSON数据包含嵌套结构时(如对象中嵌套对象或数组),需通过“逐层定位”获取成员文本,例如以下嵌套JSON:
{
"userInfo": {
"name": "李四",
"contact": {
"email": "lisi@example.com",
"phone": "13800138000"
}
},
"hobbies": ["阅读", "旅行", "编程"]
}
获取嵌套对象的成员文本
需先获取父级对象,再从中获取子级成员:
.版本 2
.子程序 获取嵌套成员文本, 文本型, 公开
.参数 json文本, 文本型, , 待解析的JSON字符串
.局部变量 json解析器, JSON解析类
.局部变量 父级对象, JSON解析类
.局部变量 结果文本, 文本型
json解析器.创建 ()
json解析器.解析 (json文本)
' 获取"userInfo"对象(嵌套层级1)
父级对象 = json解析器.取成员对象 ("userInfo")
' 从"userInfo"中获取"contact"对象(嵌套层级2)
.局部变量 联系方式对象, JSON解析类
联系方式对象 = 父级对象.取成员对象 ("contact")
' 从"contact"中获取"email"文本值
结果文本 = 联系方式对象.取成员文本 ("email")
调试输出 ("邮箱:" + 结果文本) ' 输出:邮箱:lisi@example.com
' 直接获取嵌套层级2的"phone"(链式调用,需确保每层对象存在)
结果文本 = json解析器.取成员对象 ("userInfo").取成员对象 ("contact").取成员文本 ("phone")
调试输出 ("电话:" + 结果文本) ' 输出:电话:13800138000
获取JSON数组中的成员文本
JSON数组中的成员需通过索引(从0开始)获取,若数组元素是对象,则需先取对象再取成员文本:
.版本 2
.子程序 获取数组成员文本, 文本型, 公开
.参数 json文本, 文本型, , 待解析的JSON字符串
.局部变量 json解析器, JSON解析类
.局部变量 数组对象, JSON解析类
.局部变量 结果文本, 文本型
json解析器.创建 ()
json解析器.解析 (json文本)
' 获取"hobbies"数组
数组对象 = json解析器.取成员数组 ("hobbies")
' 获取数组第1个元素(索引0)的文本值
结果文本 = 数组对象.取成员文本 (0)
调试输出 ("爱好1:" + 结果文本) ' 输出:爱好1:阅读
' 获取数组第3个元素(索引2)的文本值
结果文本 = 数组对象.取成员文本 (2)
调试输出 ("爱好3:" + 结果文本) ' 输出:爱好3:编程
' 若数组元素是对象,{"hobbies": [{"name": "篮球"}, {"name": "足球"}]}
' 获取第2个对象的"name"值:
.局部变量 元素对象, JSON解析类
元素对象 = 数组对象.取成员对象 (1) ' 索引1为第2个元素
结果文本 = 元素对象.取成员文本 ("name")
调试输出 ("爱好名称:" + 结果文本) ' 输出:爱好名称:足球
异常处理:健壮的JSON成员获取
实际开发中,JSON数据可能存在成员缺失、类型不匹配等问题,需通过异常处理避免程序崩溃,以下是常见异常场景及应对方法:
成员不存在时提供默认值
使用“是否存在成员”方法判断键名是否存在,不存在则返回默认文本:
.版本 2
.子程序 安全取成员文本, 文本型, 公开
.参数 json解析器, JSON解析类, , 已初始化的JSON解析器
.参数 成员键名, 文本型, , 目标成员键名
.参数 默认文本, 文本型, , 成员不存在时的默认值, 可空 = ""
.局部变量 结果文本, 文本型
(json解析器.是否存在成员 (成员键名))
结果文本 = json解析器.取成员文本 (成员键名)
否则
结果文本 = 默认文本
调试输出 ("警告:成员'" + 成员键名 + "'不存在,返回默认值")
结束如果
返回 (结果文本)
调用示例:
.局部变量 解析器, JSON解析类
解析器.创建 ()
解析器.解析 ("{"name":"王五"}")
' 尝试获取不存在的"address"成员,返回默认值"未知"
地址文本 = 安全取成员文本 (解析器, "address", "未知")
调试输出 ("地址:" + 地址文本) ' 输出:地址:未知
处理类型不匹配
若成员实际类型与预期不符(如期望文本但实际是数字),可通过“取成员类型”方法判断类型后再处理:
.版本 2
.子程序 获取文本值_安全处理, 文本型, 公开
.参数 json解析器, JSON解析类, , 已初始化的JSON解析器
.参数 成员键名, 文本型, , 目标成员键名
.局部变量 成员类型, 整数型
.局部变量 结果文本, 文本型
成员类型 = json解析器.取成员类型 (成员键名)
判断成员类型
条件 1 ' 文本类型
结果文本 = json解析器.取成员文本 (成员键名)
条件 2 ' 数字类型


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