Json-cpp-как инициализировать из строки и получить строковое значение?
мой код ниже аварийно завершает работу (ошибка отладки! R6010 abort() был вызван). Вы можете мне помочь? Я также хотел бы знать, как инициализировать объект json из строкового значения.
Json::Value obj;
obj["test"] = 5;
obj["testsd"] = 655;
string c = obj.asString();
2 ответов
Привет это очень просто:
1-вам нужен объект значения CPP JSON (JSON:: Value) для хранения ваших данных
2-Используйте JSON Reader (JSON:: Reader) для чтения строки JSON и синтаксического анализа в объект JSON
3 - Делай Свое дело :)
вот простой код, чтобы сделать эти шаги:
#include <stdio.h>
#include <jsoncpp/json/json.h>
#include <jsoncpp/json/reader.h>
#include <jsoncpp/json/writer.h>
#include <jsoncpp/json/value.h>
#include <string>
int main( int argc, const char* argv[] )
{
std::string strJson = "{\"mykey\" : \"myvalue\"}"; // need escape the quotes
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse( strJson.c_str(), root ); //parse process
if ( !parsingSuccessful )
{
std::cout << "Failed to parse"
<< reader.getFormattedErrorMessages();
return 0;
}
std::cout << root.get("mykey", "A Default Value if not exists" ).asString() << std::endl;
return 0;
}
для компиляции: G++ YourMainFile.cpp-o main-l jsoncpp
надеюсь, это поможет;)
Json::Reader
является устаревшим, как указано в документация. Вот как использовать Json::CharReader
и Json::CharReaderBuilder
:
std::string strJson = R"({"foo": "bar"})";
Json::CharReaderBuilder builder;
Json::CharReader* reader = builder.newCharReader();
Json::Value json;
std::string errors;
bool parsingSuccessful = reader->parse(
strJson.c_str(),
strJson.c_str() + strJson.size(),
&json,
&errors
);
delete reader;
if (!parsingSuccessful) {
std::cout << "Failed to parse the JSON, errors:" << std::endl;
std::cout << errors << std::endl);
return;
}
std::cout << json.get("foo", "default value").asString() << std::endl;
престижность P-a-o-l-o's ответ здесь: разбор строки JSON с помощью jsoncpp