如何使用YAQL将两个列表转换为指定结构的JSON对象
问题分析
- 你当前写法的核心问题是
zip函数的使用逻辑不符合需求:你用长度为2的["name","id"]列表作为zip调用主体,两个长度为3的业务列表作为参数,zip会优先匹配最短列表的长度做截断,最终生成的是[("name","vn1",6), ("id","vn2",4)]结构,转成dict时只会取每组前两个元素作为键值对,所以得到错误输出。 - 你的需求是要先把名称列表和ID列表按位置一一配对,再把每一组配对值转换成带
name、id键的对象,最后把所有对象放到data对应的数组中。
正确YAQL表达式
dict(data => zip(["vn1","vn2","vn3"], [6,4,5]).select(dict(name => $[0], id => $[1])))
运行输出
{ "data": [ { "name": "vn1", "id": 6 }, { "name": "vn2", "id": 4 }, { "name": "vn3", "id": 5 } ] }
表达式说明
- 首先用
zip(["vn1","vn2","vn3"], [6,4,5])将两个业务列表按位置配对,得到[("vn1",6), ("vn2",4), ("vn3",5)]的元组列表 - 用
select()方法遍历每个元组,将每个元组的第一个元素作为name值、第二个元素作为id值,构造单条对象 - 最后在外层用
dict()包裹,把生成的对象列表赋值给data键即可。
内容的提问来源于stack exchange,提问作者Aprilian8
相关产品推荐
相关产品推荐

