轉載:https://blog.csdn.net/foruok/article/details/50687864(解析json)
轉載:https://blog.csdn.net/foruok/article/details/51132462(構建json)
在CEF項目開發中避免不了要使用json格式的數據,為了解決對json的使用,一般都是引入第三方開源庫JsonCpp、cJson等,問題是解決了;但這樣會增加客戶端的體積,查閱資料發現CEF的確強大,它支持對json的操作,如果不想引入第三方庫,可以使用CEF操作JSON。
Cef提供了JSON解析功能,在cef_parser.h文件內有三個JSON相關的方法:
- CefParseJSON
- CefParseJSONAndReturnError
- CefWriteJSON
1.CEF解析JSON
void CMainFrameWnd::TestParseJson() { std::wstring wstrJson = _T("{"); wstrJson += _T("\"uid\" : \"chechenluoyang@163.com\","); wstrJson += _T("\"fileName\" : \"梅西.txt\","); wstrJson += _T("\"time\" : \"2017.07.29 10:55:22\","); wstrJson += _T("\"type\" : \"Libcurl HTTP POST JSON \","); wstrJson += _T("\"authList\" : \"test\""); wstrJson += _T("}"); CefRefPtr<CefValue> jsonObject = CefParseJSON(wstrJson, JSON_PARSER_ALLOW_TRAILING_COMMAS); if (jsonObject->IsValid()) { CefRefPtr<CefDictionaryValue> dict = jsonObject->GetDictionary(); CefString strUid = dict->GetString("uid");//得到chechenluoyang@163.com CefString strFilename = dict->GetString("fileName");//得到梅西.txt } }
注:因為我的工程屬性設置的是Unicode編碼,所以在用字符串拼接的時候用wstring來存儲,不然中文會亂碼。
2.構建JSON
void CMainFrameWnd::TestWriteJson() { CefRefPtr<CefDictionaryValue> pDict = CefDictionaryValue::Create(); pDict->SetInt("id", 9527); pDict->SetString("name", _T("梅西")); CefRefPtr<CefValue> pValue = CefValue::Create(); pValue->SetDictionary(pDict); std::wstring strJson = CefWriteJSON(pValue, JSON_WRITER_DEFAULT); }
生成的JSON串:
{
"id":9527,
"name":"梅西"
}
注:因為Unicode編碼,json的key value都是CefString,要用寬字符設置,最后返回的json字符串也是CefString,也要用wstring保存,不然中文會亂碼。