选择第三方库JsonCpp来解析json,JsonCpp是比较出名的c++解析库,在json官网也是首推的。下载地址是:http://sourceforge.net/projects/jsoncpp/。或者到http://download.csdn.net/detail/wklnewlife/4008660
注意: Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。
实例:
void CJSONDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
//解析json字符串
std::string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";
Json::Reader reader;
Json::Value value;
if (reader.parse(strValue, value))
{
std::string out = value["name"].asString();
AfxMessageBox(CString(out.c_str()));
const Json::Value arrayObj = value["array"];
for (unsigned int i=0;i<arrayObj.size(); i++)
{
if (!arrayObj[i].isMember("cpp"))
{
continue;
}
out = arrayObj[i]["cpp"].asString();
AfxMessageBox(CString(out.c_str()));
}
}
//序列化json对象
Json::Value root;
Json::Value arrayObj;
Json::Value item;
item["cpp"] = "jsoncpp";
item["java"] = "jsoninjava";
item["php"] = "support";
arrayObj.append(item);
root["name"] = "json";
root["array"] = arrayObj;
std::string out= root.toStyledString();
AfxMessageBox(CString(out.c_str()));
}
补充:具体sting和cstring转换详见《c/c++随笔》