【问题标题】:C lib to read and parse JSON directly from file streamC lib 直接从文件流中读取和解析 JSON
【发布时间】:2012-10-05 06:39:46
【问题描述】:

我见过很多用 C 语言解析 JSON 的库,但没有一个库可以直接从文件流中读取和解析。所有此类库(例如 Yajl、cjson)的问题在于,如果文件中的 json 文档很大,那么您必须首先将所有这些内容读入内存缓冲区,然后运行这些库提供的 API 来解析它。

API 通常看起来像

cJSON *cJSON_Parse(const char *value)

将 char* 带入缓冲区。

我想避免这种情况,因为我的文件可能非常大,而且我事先不知道文件的大小。此外,这些库维护对实际缓冲区中的对象、数组的引用以检索值,因此我无法释放原始缓冲区。

是否有可以直接从文件流中读取和解析的 JSON 解析库?

【问题讨论】:

标签: c json parsing cjson


【解决方案1】:

http://lloyd.github.com/yajl/ 可能就是你要找的东西

【讨论】:

  • 没有测试过,但是+1,因为它看起来非常适用。
  • 我在上面的评论中提到了这一点。如果您查看它的 API,它会在 char* 上运行内存中的缓冲区。不在文件上
  • 如果您追求的是与 XML 的 SAX 解析器等效的 JSON,那么 yajl 就是您所追求的。查看您将实现的回调:lloyd.github.com/yajl/yajl-2.0.1/structyajl__callbacks.html
  • 下面是演示如何使用 yajl 作为基于事件 (SAX) 解析器的示例代码:lloyd.github.com/yajl/yajl-2.0.1/…
  • @auny:但是你可以分小块读取文件,不必一次将整个文件读入内存。
【解决方案2】:

使用 mmap() 将文件映射到进程,然后简单地使用返回的地址来执行 char* 操作,这使得所有这些操作都很有用,也是一种好方法解决问题

【讨论】:

  • 所有系统都有mmap()吗?这个问题似乎没有指定特定的操作系统。
猜你喜欢
  • 2012-10-29
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2021-07-10
  • 2012-08-15
  • 2023-04-09
相关资源
最近更新 更多