2014-02-03 3 views
14

Я пытаюсь сделать минимальный пример чтения строки json, которая передается в качестве командной строки arg с boost. Я очень новичок в C++ и повышаю.C++ boost синтаксически генерирует строку json (не файл)

Мой код:

int main (int argc, char ** argv) 
{ 
    boost::property_tree::ptree pt; 
    boost::property_tree::read_json(argv[1], pt); 
    cout << pt.get<std::string>("foo"); 
} 

Я зову его, как

./myprog "{ \"foo\" : \"bar\" }" 

Но я получаю 'не может открыть файл ошибок. Как получить boost для чтения std :: string или char *, а не файла?

Благодаря

+0

Смотрите это: http://stackoverflow.com/questions/12542399/boost-property-treejson-parserread-json-iostreamsfiltering-streambuf. read_json ожидает поток, и вы даете ему строку. – bstamour

ответ

24

Что вы можете сделать, это прочитать символы в строку потока, а затем передать, что read_json.

#include <sstream> 
#include <iostream> 

#include <boost/property_tree/json_parser.hpp> 

int main (int argc, char ** argv) 
{ 
    std::stringstream ss; 
    ss << argv[1]; 

    boost::property_tree::ptree pt; 
    boost::property_tree::read_json(ss, pt); 
    std::cout << pt.get<std::string>("foo") << std::endl; 
} 

выходы

bar 
+0

Спасибо, отлично работает! – asutherland

Смежные вопросы