4

How to parse with rapidjson from std::string ? I am trying like (json string is valid, I checked on jsonlint.com)

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 is my json std::string, but when I start I always get error ( return 1). I tried also without size()+1 and '\0' but nothing (desperate measure programming). Can anyone help me ?

Damir
  • 54,277
  • 94
  • 246
  • 365

4 Answers4

7

Try this for parse std:: string

std::string str = "{ \"hello\" : \"world\" }";
copiedDocument.Parse<0>(str.c_str());
Arvind Kanjariya
  • 2,089
  • 1
  • 18
  • 23
5

if contentString is std::string, just try

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

if contentString is char *, just try

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

and you'd better post your original code snippet

stefanie wang
  • 71
  • 1
  • 3
4

Have you tried

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

?

Because, from the documentation, I fail to see why you want anything "writable"...

Daniel Frey
  • 55,810
  • 13
  • 122
  • 180
2

Seems to me there is an error with the string you send json, You are using it correctly, I suggest you try sending it:

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

And see if it works, if so obviously it's a buffer problem.. you can continue from there I am sure

Alon
  • 1,776
  • 13
  • 31