C库直接从文件流读取和解析JSON

C库直接从文件流读取和解析JSON,c,json,parsing,cjson,C,Json,Parsing,Cjson,我已经看到了许多用于在C中解析JSON的LIB,但是没有一个可以直接从文件流中读取和解析。所有这些lib(例如Yajl、cjson)的问题在于,如果文件中的json文档很大,那么您必须首先将所有这些内容读入内存缓冲区,然后运行这些lib提供的api来解析它 这些API通常看起来像 cJSON *cJSON_Parse(const char *value) 将一个字符*放入缓冲区 我想避免这种情况,因为我的文件可能非常大,而且我事先不知道文件的大小。此外,这些lib在实际缓冲区中维护对对象、数组

我已经看到了许多用于在C中解析JSON的LIB,但是没有一个可以直接从文件流中读取和解析。所有这些lib(例如Yajl、cjson)的问题在于,如果文件中的json文档很大,那么您必须首先将所有这些内容读入内存缓冲区,然后运行这些lib提供的api来解析它

这些API通常看起来像

cJSON *cJSON_Parse(const char *value)
将一个字符*放入缓冲区

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


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

可能就是您正在寻找的内容

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

如果您还没有看到这些操作,请查看:、、。我没有看过他们的代码。没有测试过它,但是+1,因为它看起来应用得很好。我在上面的评论中提到了这一点。如果你看一下它的API,它在内存缓冲区的char*上运行。不在文件上如果您使用的是与SAX XML解析器相当的JSON,那么yajl就是您所需要的。查看您要实现的回调:下面是一个示例代码,演示了如何使用yajl作为基于事件(SAX)的解析器:@auny:但是您可以将文件分成小块读取,不必一次将整个文件读入内存。是否所有系统都有
mmap()
?这个问题似乎没有指定一个特定的操作系统。