// Read whole file into a buffer FILE* fp = fopen("test.json", "r"); fseek(fp, 0, SEEK_END); size_t filesize = (size_t)ftell(fp); fseek(fp, 0, SEEK_SET); //char* buffer = (char*)malloc(filesize + 1); char buffer[1024 * 10];// = (char*)malloc(filesize + 1); size_t readLength = fread(buffer, 1, filesize, fp); buffer[readLength] = '\0'; fclose(fp); // In situ parsing the buffer into d, buffer will also be modified typedef GenericDocument, MemoryPoolAllocator<>, MemoryPoolAllocator<>> MemDocument; MemDocument d; d.ParseInsitu(buffer); const char* key = "id"; Value::ConstMemberIterator itr = d.FindMember(key); if (!d.IsObject()){ printf("Not object!"); return nullptr; } if (itr != d.MemberEnd()) std::cout << &itr->value << std::endl; else printf("NULL pointer!"); // 3. Stringify the DOM StringBuffer buff; Writer writer(buff); d.Accept(writer); std::cout << buff.GetString() << std::endl; // Query/manipulate the DOM here... //free(buffer);