Как парсить с помощью rapidjson из std::string?

Как парсить с помощью rapidjson из std::string? Я пытаюсь (строка json действительна, я проверил на 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 — это мой json std::string, но при запуске я всегда получаю сообщение об ошибке ( return 1). Я пробовал также без size()+1 и '\0', но ничего (программирование отчаянной меры). Может кто-нибудь помочь мне ?


person Damir    schedule 25.03.2013    source источник


Ответы (4)


Попробуйте это для синтаксического анализа std::string

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

если contentString является std::string, просто попробуйте

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

если contentString является char *, просто попробуйте

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

и вам лучше опубликовать исходный фрагмент кода

person stefanie wang    schedule 24.09.2013

Ты пытался

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

?

Потому что из документации я не понимаю, почему вам нужно что-то "доступное для записи"...

person Daniel Frey    schedule 25.03.2013
comment
Сначала пробовал так, но ошибка. Затем я начал меняться - person Damir; 25.03.2013
comment
В этом случае, пожалуйста, всегда публикуйте очевидный код, а не сложную версию. И покажите нам contentString, пожалуйста. - person Daniel Frey; 25.03.2013

Мне кажется, что в строке, которую вы отправляете json, есть ошибка. Вы используете ее правильно, я предлагаю вам попробовать отправить ее:

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

И посмотрите, работает ли это, если это так, очевидно, это проблема с буфером ... вы можете продолжить оттуда, я уверен

person Alon    schedule 25.03.2013