2015-08-14 33 views
0

我有一個返回字符串從我的web這樣:rapidjson不正確webservice的字符串格式

std::string json_str = "{"Count":18,"Result":[{"Description":"DATABASE TASK MODE VALUE","Name":"TASK","Val":24,"addID":0,"CreatedAt":"2015-08-12T17:57:03.954Z","ModifiedAt":"2015-08-13T20:41:30.900Z","CreatedBy":"00000000-0000-0000-0000-000000000000","ModifiedBy":"00000000-0000-0000-0000-000000000000","Owner":"00000000-0000-0000-0000-000000000000","Id":"89fb5320-411b-11e5-a0dc-8babbc75a180","Meta":{"Permissions":{"CanRead":true,"CanUpdate":true,"CanDelete":true}}}, ...etc ]}" 

此代碼的工作

document.Parse(json_str.c_str()).HasParseError()) 
assert(document.IsObject()); 
rapidjson::Value::MemberIterator localdata_0 = document.FindMember("89fb5320-411b-11e5-a0dc-8babbc75a180"); 

但隨後在這些線路上出現故障

assert(localdata_0 != document.MemberEnd()); 
assert(localdata_0->value.IsDouble()); 

有沒有一種簡單的方法來將我的字符串格式化爲正確的json格式?

const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } "; 

回答

0

解決方案是將字符串分割成行並解析。將每個字符串行放入一個向量中。

std::vector <std::string> json_str_rows; 
std::vector <float> json_float_ret; 

// get values from rows 
try 
{ 
    for (size_t i = 0; i < json_str_rows.size(); i++) 
    { 
     if (document.Parse((json_str_rows.at(i)).c_str()).HasParseError()) 
     { 
      std::cerr << "system_rapidjson::read_json_str >> document.Parse >> ERROR at(" << i << ") = " << json_str_rows.at(i) << std::endl; 
      throw -3; 
     } 

     json_float_ret.push_back (document["Val"].GetDouble()); // get value from row 
    } 
} 
catch (const std::exception &e) 
{ 
    std::cerr << "system_rapidjson::read_json_str >> get values from rows >> ERROR = " << e.what() << std::endl; 
    throw -2; 
}