易语言如何取JSON值:从基础到实践的完整指南
在数据交互日益频繁的今天,JSON(JavaScript Object Notation)已成为跨平台数据交换的主流格式,易语言作为国产编程语言,虽以中文编程为特色,但在处理JSON数据时,开发者常因缺乏原生支持而感到困惑,本文将详细介绍易语言中取JSON值的多种方法,从基础原理到代码实践,帮助开发者轻松应对JSON数据解析需求。
理解JSON数据结构:取值的前提
在讨论“如何取值”前,需先明确JSON的基本结构,JSON数据以键值对(Key-Value)为核心,常见类型包括:
- 对象(Object):用 包裹,多个键值对用逗号分隔,如
{"name":"张三","age":30}。 - 数组(Array):用
[]包裹,多个值用逗号分隔,如[{"name":"李四"},{"name":"王五"}]。 - 值(Value):可以是字符串()、数字(
123)、布尔值(true/false)、null等。
取值的核心逻辑是:通过“键(Key)”定位对象中的值,通过“索引(Index)”定位数组中的元素,从 {"name":"张三"} 中取 name 的值,就是通过键 "name" 获取 "张三"。
易语言取JSON值的常用方法
易语言本身未内置JSON解析功能,但可通过第三方模块、DLL调用或第三方工具实现,以下是三种主流方法,按推荐度排序:
使用易语言JSON模块(推荐,简单高效)
易语言爱好者社区开发了多个JSON解析模块(如“易语言JSON模块”“超级JSON模块”),这些模块封装了JSON解析的核心功能,支持直接调用函数取值,适合新手快速上手。
下载与引入模块
- 下载:从易语言官网、易语言论坛或GitHub搜索“易语言JSON模块”,下载最新版本(如“易语言JSON模块5.0”)。
- 引入:打开易语言程序,点击“程序”→“加入模块”,选择下载的JSON模块文件(
.e文件)。
核心函数与取值示例
以“易语言JSON模块”为例,常用函数包括:
JSON解析(文本):将JSON文本解析为JSON对象。取JSON值(JSON对象, 键路径):通过键路径获取指定值(支持多级键,如"user.name")。取JSON长度(JSON对象):获取JSON对象或数组的长度。
代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 json文本, 文本型
.局部变量 json对象, 对象型
.局部变量 姓名, 文本型
.局部变量 年龄, 整数型
' 定义JSON文本(模拟从网络或文件获取的JSON数据)
json文本 = "{""user"":{""name"":""张三"",""age"":30},""hobbies"":[""阅读"",""编程""]}"
' 解析JSON文本为JSON对象
json对象 = JSON解析 (json文本)
' 取一级键 "user" 的值(返回一个子对象)
.如果真 (取JSON值 (json对象, "user") ≠ "")
' 取二级键 "name" 的值
姓名 = 取JSON值 (json对象, "user.name")
信息框 ("姓名:" + 姓名, 0, , )
' 取二级键 "age" 的值(需转换为整数型)
年龄 = 到整数 (取JSON值 (json对象, "user.age"))
信息框 ("年龄:" + 到文本 (年龄), 0, , )
.如果真结束
' 取数组 "hobbies" 的第一个元素(索引从0开始)
.如果真 (取JSON长度 (json对象, "hobbies") > 0)
信息框 ("爱好1:" + 取JSON值 (json对象, "hobbies[0]"), 0, , )
.如果真结束
说明:
- 键路径支持多级嵌套,用 分隔对象层级,用
[索引]表示数组元素(如hobbies[1]取第二个爱好)。 - 返回的值默认为文本型,若需数字、布尔值等,需用
到整数()、到布尔()等函数转换。
调用第三方DLL(灵活,适合复杂场景)
若需更高效的JSON处理或模块功能不足,可通过易语言的 调用DLL命令 调用成熟的JSON库(如 cJSON、RapidJSON),这里以广泛使用的 cJSON 为例。
准备工作
- 下载
cJSON库:从GitHub下载cJSON源码(C语言库),编译为DLL文件(如cJSON.dll),或直接使用编译好的DLL(适用于Windows系统)。 - 头文件:将
cJSON.h放入易语言include目录(可选,若需查看函数定义)。
核心DLL函数与取值示例
cJSON 常用函数(需在易语言中声明):
cJSON_Parse(const char *json):解析JSON文本,返回JSON对象。cJSON_GetObjectItem(cJSON *object, const char *string):通过键获取JSON对象中的项。cJSON_GetArrayItem(cJSON *array, int index):通过索引获取数组中的项。cJSON_IsString(cJSON *item):判断项是否为字符串。cJSON_IsNumber(cJSON *item):判断项是否为数字。c_Delete(cJSON *item):释放JSON对象(避免内存泄漏)。
代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 json文本, 文本型
.局部变量 json对象, 整数型
.局部变量 user对象, 整数型
.局部变量 name项, 整数型
.局部变量 age项, 整数型
.局部变量 姓名, 文本型
.局部变量 年龄, 整数型
' 声明cJSON的DLL函数(需与DLL中的函数定义一致)
.声明 DLL命令 解析JSON, , , "cJSON_Parse", 公开, "传文本型"
.声明 DLL命令 取对象项, , , "cJSON_GetObjectItem", 公开, "传整数型, 传文本型, 返回整数型"
.声明 DLL命令 取数组项, , , "cJSON_GetArrayItem", 公开, "传整数型, 传整数型, 返回整数型"
.声明 DLL命令 是否为字符串, , , "cJSON_IsString", 公开, "传整数型, 返回整数型"
.声明 DLL命令 是否为数字, , , "cJSON_IsNumber", 公开, "传整数型, 返回整数型"
.声明 DLL命令 获取字符串值, , , "cJSON_GetStringValue", 公开, "传整数型, 返回文本型"
.声明 DLL命令 获取数字值, , , "cJSON_GetNumberValue", 公开, "传整数型, 返回双精度浮点型"
.声明 DLL命令 释放JSON, , , "cJSON_Delete", 公开, "传整数型"
' 定义JSON文本
json文本 = "{""user"":{""name"":""李四"",""age":25},""hobbies"":[""音乐"",""运动"]}"
' 解析JSON文本
json对象 = 解析JSON (json文本)
.(json对象 = 0)
信息框 ("JSON解析失败!", 0, , )
返回 ()
.如果结束
' 取"user"对象
user对象 = 取对象项 (json对象, "user")
.(user对象 = 0)
信息框 ("未找到user键!", 0, , )
释放JSON (json对象)
返回 ()
.如果结束
' 取"name"项
name项 = 取对象项 (user对象, "name")
.(name项 ≠ 0 且 是否为字符串 (name项) ≠ 0)
姓名 = 获取字符串值 (name项)
信息框 ("姓名:" + 姓名, 0, , )
.如果结束
' 取"age"项
age项 = 取对象项 (user对象, "age")
.(age项 ≠ 0 且 是否为数字 (age项) ≠ 0)
年龄 = 取整数 (获取数字值 (age项))
信息框 ("年龄:" + 到文本 (年龄), 0, , )
.如果结束
' 取"hobbies"数组的第二个元素(索引1)
.局部变量 hobbies数组, 整数型
.局部变量 hobby


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