c++ - 使用 POCO JSON 进行增量解析

标签 c++ json parsing poco-libraries

我正在使用 POCO 1.6.0。我正在尝试编写一个服务,用于在原始套接字上接收 JSON 消息并对其进行解析。

但是,POCO 的解析器唯一可行的方法似乎是将整个字符串作为输入,然后返回解析结果,或者抛出“语法错误”异常。

所以这意味着每次新字节到达套接字时我都必须重新解析整个消息;并且目前还没有办法区分实际的语法错误和它只是一个不完整的消息。

parseChar 函数看起来不错,但它是私有(private)的。有没有办法让解析器解析一些消息并保持在该状态,以便我可以通过传递更多数据来恢复解析?

此外,是否有任何方法可以区分实际的语法错误和不完整的消息(最好是获得有关语法错误的确切性质的反馈)。

伪代码:

Poco::JSON::Parser parser;
std::string input_buffer;

for(;;)
{
    // (append byte(s) from socket into input_buffer)
    // (return failure if this read times out after 5 seconds)

    parser.reset();
    try
    {
        parser.parse(input_buffer);
        break;
    } 
    catch(Poco::Exception &e)
    {
        // (abort, but we don't know if data incomplete or data malformed
    }
}

注意:我意识到这个问题可以通过让客户端按照 this thread 中的描述构建整个消息来解决。 ,但是我希望通过仅使格式正确的数据包足以定义帧(该问题的方法 5)来使客户端尽可能简单。

最佳答案

目前没有办法做任何你想做的事情。但是,它们都是合理的要求并且是可行的,因此将其放在TODO list 上。对于即将发布的版本之一。

关于c++ - 使用 POCO JSON 进行增量解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29338851/

相关文章:

javascript - 我如何从 json 获取值并在 javascript 中显示它们

c++ - 用精神将日期时间字符串解析为 time_t 值

c++ - 字体大小更改后 Qt 小部件无法正确调整

c++ - 非静态全局对象与指向动态对象的全局指针

c++ - std::ofstream 二进制写入的意外结果

javascript - 在 javascript 中访问 JSON 数据未定义错误

c++ - Qt为多行文本绘制轮廓

PHP - 将数据从 MYSQL 提取到 JSON 时,如何从 UTC 更改日期时间?

c++ - 使用 boost spirit x3 解析为具有 bool 值或枚举成员的结构

java - JAXB,如何在错误的情况下解码不同的对象