易语言中如何获取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 ' 数字类型足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播
快连VPN
快连官网
足球直播
足球直播
快连VPN
快连官网
Google Chrome
Google Chrome
快连VPN
letsVPN
chrome浏览器
谷歌浏览器
足球直播
足球直播
欧易平台
欧易平台
欧易下载
欧易平台
欧易下载
欧易平台
欧易下载
欧易下载
欧易
欧易下载
欧易APP
欧易下载
欧易APP
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
欧易app
欧易app
欧易
欧易
NBA直播
足球直播
NBA直播
nba直播
英超直播
篮球直播
西甲直播
德甲直播



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