如何在DataWeave中拼接含$like的GraphQL查询避免语法错误
解决DataWeave拼接GraphQL查询含$like的语法问题
问题根源
- 第一个错误(
Unable to resolve reference of: 'like'):DataWeave中$是变量引用标识符,直接写"$like"会被解析为尝试引用名为like的变量,导致找不到变量报错。 - 第二个错误(
Syntax Error: Unexpected <EOF>):手动转义时字符串拼接逻辑错误,导致查询字符串未正确闭合,触发文件提前结束的语法问题。
解决方案
方案1:修正字符串拼接逻辑(手动转义)
调整拼接方式,将变量从字符串片段中分离,确保$和双引号转义正确:
'funquery(filter:"{\"' ++ vars.filter ++ '\":{\"\\$like\":\"' ++ vars.value ++ '\"}}") { #values to get }'
- 用
\"转义字符串内的双引号,保证JSON格式合法 - 用
\\$转义$,避免DataWeave将其识别为变量引用 - 通过
++将字符串片段与变量正确拼接,确保整体字符串闭合完整
方案2:通过对象转JSON拼接(推荐)
先构建符合格式的JSON对象,再转换为字符串拼接,彻底避免手动转义的麻烦:
var filterObject = { (vars.filter): { "$like": vars.value } } var filterJson = write(filterObject, "application/json", { indent: false }) --- "funquery(filter:" ++ filterJson ++ ") { #values to get }"
- 使用DataWeave动态键语法
(vars.filter)构建过滤条件对象 - 用
write函数将对象转为无缩进的JSON字符串,保证格式正确 - 直接拼接JSON字符串到GraphQL查询中,语法更清晰,不易出错
内容的提问来源于stack exchange,提问作者Rafael Monteiro Matos
相关产品推荐
相关产品推荐

