C++事件驱动JSON流读取器

8
我刚刚发现了 YAJL 项目,它完全符合我的需求。
它可以从流中读取数据,在每个有效的解析令牌上调用回调函数,并在新数据到达时重新解析不完整的 JSON 数据。
但是我更喜欢 C++。当然,我可以从 C++ 项目中使用这个库,甚至自己编写包装器,但无论如何,本地的 C++ 更可取。
我看了一下 JsonCPP,但似乎无法从流中读取不完整的 JSON 数据。
还有其他用于解析 JSON 流的 C++ 库吗?
以下是更多要求:
- 轻量级。boost 或 Qt 不适合。 - 我需要在商业闭源软件中自由使用它(MIT、公共领域等)。 - 支持非阻塞读取。或者允许提供数据(追加传入数据)。

我相信http://json.org上至少有几个C++实现。请在主页上向下滚动。 - Bartek Banachewicz
它们都有一些缺陷:阻塞并且没有提供feed方法,期望完整的JSON,愚蠢的实现只允许解析JSON的子集。这是初步看法,也许我对某些事情是错误的。 - Sergey
@Rion,你找到你想要的东西了吗? - fghj
@user1034749,就我所记得的,没有。 - Sergey
新来的读者可能想要查看Boost JSON流读取器 - Paul Rooney
显示剩余2条评论
2个回答

3

最近我在寻找满足类似需求的库,实际上只找到了1.5个支持此类要求的库:

  1. https://github.com/kazuho/picojson

这是一个头文件库,使用BSD许可证,并且具有以下接口:

Iter parse(value& out, const Iter& first, const Iter& last, std::string* err);

所以,您可以用几行代码创建append_incoming_data

  1. https://github.com/dropbox/json11 是一个单文件库,许可证类似于BSD,支持c++11,但有一个接口,允许解析部分从网络上到达的json数据,需要打补丁:

https://github.com/dropbox/json11/pull/55

P.S.

轻量级。boost或者Qt不适用。

实际上,它们之所以不适用是因为它们不能解析部分就绪的json数据,无法“喂入”数据。


0

其他选项包括


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接