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

使用Poco::JSON::Parser解析JSON触发JSONException问题求助

Poco::JSON::Parser解析API返回流触发JSONException排查方案

排查步骤与解决方案

1. 捕获异常获取详细错误信息

当前代码未捕获Poco::JSON::JSONException,无法定位具体错误类型(比如JSON语法错误、非法字符、流读取异常等)。修改代码添加异常捕获:

try {
    std::istream& page = session.receiveResponse(response);
    Poco::JSON::Parser parser;
    Poco::Dynamic::Var result = parser.parse(page);
} catch (const Poco::JSON::JSONException& e) {
    std::cerr << "JSON解析错误: " << e.what() << std::endl;
}

异常信息会直接暴露问题核心,比如是否存在未闭合的括号、意外字符等。

2. 检查输入流的状态与读取位置

如果之前打印过page流的内容,流的读取指针会移动到末尾,后续parse调用会读取空内容触发异常。若需要保留流内容解析,打印后需重置流指针:

// 打印流内容后重置指针到起始位置
page.seekg(0, std::ios::beg);

若流为一次性不可重复读取类型,可将流内容复制到本地字符串后再解析:

std::istream& page = session.receiveResponse(response);
std::string jsonStr(std::istreambuf_iterator<char>(page), {});

Poco::JSON::Parser parser;
try {
    Poco::Dynamic::Var result = parser.parse(jsonStr);
} catch (const Poco::JSON::JSONException& e) {
    std::cerr << "JSON解析错误: " << e.what() << std::endl;
}

3. 验证JSON格式的完整性与合法性

你提供的JSON示例末尾带有...,需确认API返回的是完整且语法合规的JSON:

  • 检查是否存在未闭合的大括号/中括号
  • 确认字符串是否正确闭合、转义符使用合规
  • 排查是否存在UTF-8 BOM头(部分API返回的JSON带BOM,Poco解析器默认不处理,需手动去除)

4. 检查Poco版本兼容性

部分旧版本Poco的JSON解析器对特殊键名(如带点号、空格的键)支持不完善,确认使用的Poco版本是否为稳定新版本,必要时升级。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:07:59