如何在Bot Framework Composer中用CEL统计查询JSON集合元素?
在Bot Framework Composer中用CEL处理JSON数组的实用示例
我刚好在Bot Framework Composer里折腾过CEL表达式处理JSON响应,针对你遇到的统计数组元素、访问属性的问题,整理了几个能直接用的有效写法:
1. 统计数组总元素数量
你之前用count()函数踩了个小坑——CEL里获取数组总长度要用size()函数,count()是用来筛选统计符合条件的元素的,不是直接拿数组长度的。
假设你的GET请求返回的JSON已经存在dialog.result变量里(和天气示例的存储逻辑一致),那统计result数组元素数量的正确写法是:
@{size(dialog.result.result)}
要是你需要统计满足特定条件的元素(比如筛选number不为空的项),才用count(),举个例子:
@{count(dialog.result.result, item, item.number != '')}
2. 访问单个元素的属性
你的写法本身是对的,但要确保变量路径完全匹配。如果你的JSON结构确实是{ "result": [ { "number": "item 1" }, ... ] }且存在dialog.result中,访问第一个元素的number属性可以直接写:
@{dialog.result.result[0].number}
要是想访问最后一个元素,可以用数组长度动态算索引:
@{dialog.result.result[size(dialog.result.result)-1].number}
3. 遍历数组输出所有元素
如果需要把数组里的所有number值都列出来,可以用join()函数拼接成字符串:
@{join(dialog.result.result, item, item.number, ', ')}
这个表达式会把所有元素的number用逗号加空格连起来,输出结果就是:item 1, item 2, item 3
排查小技巧
要是还是不生效,建议先把完整的dialog.result输出出来,确认JSON结构和存储路径是否正确:
@{json(dialog.result)}
这样能快速排查是不是变量路径写错了导致表达式失效。
内容的提问来源于stack exchange,提问作者WizxX20
相关产品推荐
相关产品推荐

