2012-07-25 35 views
1

我有一个很小的代码块,我需要解析出C++如何解析这个串出

我只是想喜欢

LONGNAME(短名称)的值,如欧元(EUR)也许Bristish磅(GBP)

,并将其输出到以这种方式

欧元(EUR)
英镑(GBP)

使用C++一个file.txt的
{ 
     "shortname": "EUR", 
     "longname": "Euro", 
     "users": "Austria,Belgium,Cyprus,Finland,Helsinki,France,Paris,Germany,Berlin,Greece,Athens,Ireland,Dublin,Italy,Rome,Milan,Pisa,Luxembourg,Malta,Netherlands,Portugal,Sl$ 
       "alternatives": "ewro,evro", 
     "symbol": "€", 
     "highlight": "1" 
    }, 
    { 
     "shortname": "GBP", 
     "longname": "British Pound", 
     "users": "United Kingdom,UK,England,Britain,Great Britain,Northern Ireland,Wales,Scotland,UK,Isle of Man,Jersey,Guernsey,Tristan da Cunha,South Georgia and the South San$ 
     "alternatives": "Quid,Pound Sterling,Sterling,London,Cardiff,Edinburgh,Belfast", 
     "symbol": "£", 
     "highlight": "1" 
    }, 
+2

http://jsoncpp.sourceforge.net/ – Aesthete 2012-07-25 09:36:20

+2

什么。有。您。试过吗? – Ashe 2012-07-25 09:37:01

+0

我必须真的使用json吗?我不能通常没有json – user1548465 2012-07-25 09:47:59

回答

2

这是JSON。你最好使用解析器。我建议你jsonCpplink

0

你可以使用lex和yacc。这具有不存在外部库依赖性的优点。

0

我建议你使用的http://www.boost.org/doc/libs/1_50_0/doc/html/property_tree.html

例子。

#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/json_parser.hpp> 
#include <sstream> 
#include <iostream> 

int main() 
{ 
    using namespace boost::property_tree; 
    std::string s = "{\ 
     \"shortname\": \"EUR\",\ 
     \"longname\": \"Euro\",\ 
     \"users\": \"Austria,Belgium,Cyprus,Finland,Helsinki,France,Paris,Germany,\ 
     Berlin,Greece,Athens,Ireland,Dublin,Italy,Rome,Milan,Pisa,Luxembourg,Malta,Netherlands,Portugal\",\ 
     \"alternatives\": \"ewro,evro\",\ 
     \"symbol\": \"€\",\ 
     \"highlight\": \"1\"\ 
    }"; 
    std::stringstream ss(s); 
    ptree pt; 
    json_parser::read_json(ss, pt); 
    std::string short_n = pt.get<std::string>("shortname"); 
    std::string long_n = pt.get<std::string>("longname"); 
    std::cout << long_n << "(" << short_n << ")" << std::endl; 
} 

http://liveworkspace.org/code/7b9bf87f128a2fe42d606305f4411771