2013-03-25 76 views
3

如何解析std :: string中的rapidjson? 我试图像(JSON字符串是有效的,我查了jsonlint.com如何解析std :: string中的rapidjson?

Document document; 
char * writable = new char[contentString.size() + 1]; 
std::copy(contentString.begin(), contentString.end(), writable); 
writable[contentString.size()] = '\0'; // don't forget the terminating 0 
std::cout<<writable<<"\n"; 
if (document.Parse<0>(writable).HasParseError()) 
    return 1; 

contentString是我JSON的std :: string,但是当我开始我总是得到错误(回报1) 。 我也尝试没有大小()+ 1和'\ 0'但没有(绝望的措施编程)。 任何人都可以帮助我吗?

回答

4

你试过

if (document.Parse<0>(contentString.c_str()).HasParseError()) 
    return 1; 

因为,从文档,我不明白你为什么想要的东西“可写” ...

+0

我起初尝试过这种方式,但错误。然后我开始改变 – Damir 2013-03-25 16:11:53

+1

在这种情况下,请始终发布明显的代码,而不是复杂的版本。请告诉我们contentString。 – 2013-03-25 16:12:51

2

在我看来,有一个与串中的错误发送JSON, 您正确地使用它,我建议你尝试发送它:

const char json[] = "{ \"hello\" : \"world\" }"; 

,看看它是否工作,如果是的话明显是一个缓冲区的问题..你可以从那里继续我相信

4

如果contentString是的std :: string,只是尝试

document.Parse<0>(contentString.c_str()).HasParseError() 

如果contentString是char *,只要尝试

document.Parse<0>(contentString).HasParseError() 

你最好张贴您的原始代码段

3

尝试此解析的std :: string

std::string str = "{ \"hello\" : \"world\" }"; 
copiedDocument.Parse<0>(str.c_str());