You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CKAN API调用datastore_search时filters含分号报JSON解析错误如何解决

问题根因

报错并非CKAN的JSON解析逻辑不支持分号,核心原因是未做URL编码的;会被CKAN依赖的Web框架识别为查询参数分隔符(优先级和&一致),导致后端实际接收到的filters参数是被截断的残缺JSON,最终触发解析失败。

解决方案
  • 对filters参数做标准URL编码
    URL查询串中的所有特殊字符都需要做百分号编码,;对应的编码值为%3B,编码后不会再被框架误判为参数分隔符。
    编码后的可正常执行的请求示例:
    https://dados.uffs.edu.br/api/3/action/datastore_search?resource_id=75eb15ab-c30f-4c40-8c19-a5bf936a0aa5&filters=%7B%22coordenador%22%3A%22te%3Bst%22%7D
    
    开发时不要手动拼接URL参数,直接使用所用编程语言HTTP库自带的参数构造能力,库会自动完成所有特殊字符编码,从根源避免这类问题。以Python requests库为例:
    import requests
    
    api_endpoint = "https://dados.uffs.edu.br/api/3/action/datastore_search"
    params = {
        "resource_id": "75eb15ab-c30f-4c40-8c19-a5bf936a0aa5",
        "filters": {"coordenador": "te;st"}
    }
    resp = requests.get(api_endpoint, params=params)
    
  • 改用POST请求传参
    如果GET请求经过网关、反向代理时仍存在特殊字符拦截问题,可直接改用POST方式调用接口,将所有参数放在JSON格式的请求体中传输,完全绕开URL参数解析的特殊字符限制。请求示例:
    curl -X POST https://dados.uffs.edu.br/api/3/action/datastore_search \
      -H "Content-Type: application/json" \
      -d '{"resource_id":"75eb15ab-c30f-4c40-8c19-a5bf936a0aa5","filters":{"coordenador":"te;st"}}'
    

内容的提问来源于stack exchange,提问作者Rodrigo R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:27:25