易语言数据库ON一致取值,实现JSON式精准数据提取
在易语言中,通过使用数据库的ON语句结合易语言自带的“JSON解析与生成支持库”,可以实现类似JSON查询式的精准数据提取。
为什么需要这么做?
易语言操作数据库很方便,但它处理复杂结构的文本数据,比如多层嵌套的地址信息或商品规格时,就会遇到麻烦。这些信息如果存成一个长文本在数据库里,想单独取里面的省份或者颜色就不好办。JSON格式能把数据整理得条理清晰,用{}和[]把数据一层层包裹起来,表达能力强。如果能让数据库查询结果直接按JSON的“路径”来取数,就既能享受数据库快速查询的好处,又能像操作JSON一样灵活和精确。
核心思路
这个办法的核心是分两步走。第一步,先用数据库的ON语句,把几个相关的表连起来,形成一个“宽表”,把所有可能需要的数据字段都拿到手。第二步,不是直接把这些枯燥的行列数据给程序用,而是用易语言的“JSON解析与生成支持库”,把这些数据按照你想要的格式,组装成一个大的JSON文本。组装好之后,你就可以像在JavaScript里一样,用“`.`”或者“`[]`”这样的方式,精准地拿到JSON里面任何一个小角落的数据了。
具体怎么操作?
1. 连接并查询数据库。假设有两个表,一个“用户表”存用户ID和名字,一个“订单表”存订单ID、用户ID和商品名。用类似“`SELECT * FROM 用户表 ON 用户表.ID = 订单表.用户ID`”的语句,就能把用户和订单信息合并查出来。
2. 生成JSON字符串。用“JSON解析与生成支持库”里的“类_json”。先创建一个“类_json”对象,然后调用它的“置属性”方法。比如,你可以用循环把查询到的每一条记录,变成一个小的JSON对象,属性名就是“用户名”、“订单商品”。然后把这些小对象,通过“加成员”方法,放到一个JSON数组里。最后,用“到文本”方法,就能得到一串标准JSON格式的文本。
3. 精准取值。现在你手里是一个JSON字符串。你可以用另一个“类_json”对象,用“解析”方法把这个字符串装进去。之后,就可以用“取通用属性”这个方法,像指路一样告诉它你要什么。比如,你想取第一个用户的订单商品,路径可以写成“`[0].订单商品`”。它就会像导航一样,准确找到那个值并返回给你。这里的关键是路径要写对,它和之前你组装JSON时的结构必须完全一致。
需要注意的地方
第一,数据库ON连接的条件要写对,不然查出来的数据关联错了,后面生成的JSON数据也是乱的。第二,在组装JSON的时候,属性名字自己要想好,前后要统一。比如决定用“userName”就都用这个,别一会用“userName”一会用“用户名”。第三,从JSON里取值时,路径是大小写敏感的,而且下标是从0开始的,这些细节不注意就会取不到值或者报错。
一个简单的代码例子
以下是关键步骤的代码示意:连接数据库并查询后,假设记录集是“记录集1”。
创建“类_json”对象:`JSON对象 = 创建对象 (“类_json”)` `JSON数组 = 创建对象 (“类_json”)`
循环记录集,组装数据:`循环判断首 ()` `JSON对象.置属性 (“用户名”, 记录集1.读 (“用户名”))` `JSON对象.置属性 (“商品”, 记录集1.读 (“商品名”))` `JSON数组.加成员 (JSON对象.取数据文本 ())` `记录集1.到下一条 ()` `循环判断尾 (记录集1.尾记录后 = 假)`
生成总JSON:`总JSON.置属性 (“数据列表”, JSON数组.取数据文本 ())` `JSON字符串 = 总JSON.取数据文本 ()`
解析并取值:`解析用JSON.解析 (JSON字符串)` `结果 = 解析用JSON.取通用属性 (“数据列表[0].商品”)`
这样,“结果”变量里就是第一条数据的商品名称了。
FAQ
问:易语言里操作JSON,一定要用这个支持库吗?
答:不是必须,但这个支持库是易语言官方提供的,比较稳定和方便。你也可以自己写代码去拼字符串或者解析字符串,但那会很麻烦,容易出错。用支持库里的现成命令,更省事也更可靠。
问:如果数据库字段里本身存的就是JSON文本,怎么精准取里面的值?
答:那就更简单了。直接从数据库读出那个字段的文本,然后用“类_json”对象的“解析”方法去解析它。解析成功后,直接用“取通用属性”方法,按照JSON路径去取值就可以了。比如数据库里有个字段叫“地址信息”,里面是`{"省":"广东","市":"深圳"}`,你可以用`解析用JSON.取通用属性("省")`直接拿到“广东”。
问:这个方法能用来处理大量数据吗?会不会慢?
答:对于大量的数据,要小心使用。因为它是先把所有数据从数据库读到易语言里,再组装成JSON。如果数据量非常大,可能会占用很多内存,让程序变慢。好的做法是,尽量让数据库先做好筛选(用WHERE语句),只查询需要的那部分数据,减少传到易语言的数据量。对于特别大的数据,最好分批处理。
引用来源:本方法基于易语言5.9版本及自带的“JSON解析与生成支持库”官方文档,并结合常见的数据库操作实践总结而成。