gpt4 book ai didi

c++ - Rapidjson 不读取文件

转载 作者:行者123 更新时间:2023-11-28 05:46:10 32 4
gpt4 key购买 nike

我搜索了这个特定错误,但没有找到任何相关问题。

我正在尝试使用 Rapidjson 来解析我的 C++ 项目中的 .json 文件,这就是我的做法(遵循 RapidJSON tutorial 的说明):

main.cpp

#include "../include/rapidjson/document.h"
...
using namespace rapidjson;
int main() {
...
Document doc;
doc.Parse("data/entities.json");

if (doc.HasMember("DreadNought") { ... }
...
}

if 语句的预期结果是向 Win32 控制台打印一些内容,但它抛出一个 Rapidjson 内断言 document.h .

重点是它识别rapidjson文件,因为它找到函数并且不会抛出任何错误。但是,当我调试时,这就是 doc 的内容执行后对象包含 Parse()

{data_={s={length=0 hashcode=0 str=0x00000000 <NULL> } ss={str=0x0124fa30 "" } n={i={i=0 padding=0x0124fa34 "" } ...} ...} }
0x0321ec30 {chunkHead_=0x00000000 <NULL> chunk_capacity_=65536 userBuffer_=0x00000000 ...}

doc 中的所有字段对象有 NULL值。请注意,我试过 Parse<0>() ,除非我不知道这是什么意思 atm,结果完全一样。

这不是路径问题,因为我对图像和其他数据使用了相同的路径 ( data/ ),并且它们已找到。

我从编译器得到的唯一信息是一些我无法破译的警告。

1>...\include\rapidjson\encodedstream.h(88): warning C4512: 'rapidjson::EncodedInputStream<rapidjson::UTF8<char>,rapidjson::MemoryStream>' : assignment operator could not be generated
...\include\rapidjson\encodedstream.h(68) : see declaration of 'rapidjson::EncodedInputStream<rapidjson::UTF8<char>,rapidjson::MemoryStream>'

1>...\include\rapidjson\document.h(324): warning C4512: 'rapidjson::GenericStringRef<char>' : assignment operator could not be generated
...\include\rapidjson\document.h(1119) : see reference to class template instantiation 'rapidjson::GenericStringRef<char>' being compiled
1> ...\include\rapidjson\document.h(1118) : while compiling class template member function 'rapidjson::GenericMemberIterator<false,Encoding,Allocator> rapidjson::GenericValue<Encoding,Allocator>::FindMember(const char *)'
1> with
1> [
1> Encoding=rapidjson::UTF8<char>
1> , Allocator=rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>
1> ]
1> ...\include\rapidjson\document.h(1123) : see reference to function template instantiation 'rapidjson::GenericMemberIterator<false,Encoding,Allocator> rapidjson::GenericValue<Encoding,Allocator>::FindMember(const char *)' being compiled
1> with
1> [
1> Encoding=rapidjson::UTF8<char>
1> , Allocator=rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>
1> ]
1> ...\include\rapidjson\document.h(2010) : see reference to class template instantiation 'rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>' being compiled
1> ...\src\main.cpp(17) : see reference to class template instantiation 'rapidjson::GenericDocument<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>,rapidjson::CrtAllocator>' being compiled

我认为阅读此警告的原因是它不接受 const char * ,但这是我链接的教程中的完成方式,它们没有显示任何其他方式。

提前致谢。

更新:

这似乎是文件的问题,但我不确定,也不知道如何避免。我使用 Visual Studio Code 创建了该文件并将其保存为 .json,并且我从 Windows 资源管理器将其创建为 .txt,结果相同。我也是从JSON Editor Online下载的,而且它不起作用,所以我几乎可以肯定还有另一个我无法解决的问题......

最佳答案

在 API Document::Parse(const char* json) 中,参数 json 是一个包含 JSON 的字符串,而不是文件名。

你可以

  1. 自行将JSON文件加载成字符串,然后调用Parse();或
  2. 使用ParseStream() with FileReadStream which wraps FILE* ;或
  3. 使用ParseStream() with IStreamWrapper which wraps ifstream .

对于大的 JSON 文件,2 和 3 具有减少内存使用的优势。

关于c++ - Rapidjson 不读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36160719/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com