JQL查询中如何正确转义项目名称里的特殊字符?

Mr-世玉 阅读 65

我在用 Jira 的 REST API 调用 JQL 查询时,项目名里有个连字符(比如 “FRONT-END”),结果一直报语法错误。试过加引号、转义符都不行,是不是我写法有问题?

前端是用 Vue 发请求的,代码大概这样:

<script>
export default {
  methods: {
    async fetchIssues() {
      const jql = project = FRONT-END AND status = "In Progress";
      const res = await fetch(/rest/api/2/search?jql=${encodeURIComponent(jql)});
      // 返回 400 错误:JQL parse error
    }
  }
}
</script>
我来解答 赞 8 收藏
二维码
手机扫码查看
1 条解答
钰欣🍀
在 JQL 查询中,项目名称如果包含特殊字符,比如连字符,确实需要特别处理。你已经尝试了加引号和转义符,但可能没有完全正确地应用。下面我一步步解释如何正确处理这个问题。

首先,JQL 语句中的字符串(比如项目名称)应该用双引号括起来。但是,如果你的项目名称包含了双引号,那么你需要对双引号进行转义。不过,在你的例子中,项目名称没有双引号,所以只需要用双引号包裹就可以了。

其次,你在构建 JQL 查询字符串时,还需要确保整个字符串被正确地 URL 编码。这是因为你在通过 URL 参数传递这个查询字符串,浏览器或者服务器可能不会正确解析未编码的特殊字符。

我们来看一下修正后的代码:

export default {
methods: {
async fetchIssues() {
// 构建 JQL 查询字符串,注意项目名称需要用双引号包裹
const jql = 'project = "FRONT-END" AND status = "In Progress"';

// 对整个 JQL 字符串进行 URL 编码
const encodedJql = encodeURIComponent(jql);

// 发送请求,注意 URL 中的 jql 参数使用了编码后的字符串
const res = await fetch(/rest/api/2/search?jql=${encodedJql});

// 处理响应
if (res.ok) {
const data = await res.json();
console.log(data);
} else {
console.error('Error fetching issues:', res.statusText);
}
}
}
}


这里需要注意的是,我们在构建 JQL 查询字符串时,将项目名称 "FRONT-END" 用双引号包裹。然后,我们使用 encodeURIComponent 函数对整个 JQL 字符串进行 URL 编码,确保所有的特殊字符都被正确处理。最后,我们将编码后的字符串作为 jql 参数的值传递给 fetch 函数。

这样应该可以解决你遇到的 JQL 解析错误的问题。希望这能帮到你!
点赞
2026-03-21 23:24