KenTien 发表于 2025-3-11 08:35:13

CEF3专辑-进阶篇-07-JSON的操作

本帖最后由 KenTien 于 2025-5-5 19:43 编辑

JSON的操作
Cef提供了JSON解析功能,在cef_parser.h文件内有三个JSON相关的方法:CefParseJSONCefParseJSONAndReturnErrorCefWriteJSON
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("}");

/*第一个參数是带解析的json串,类型是CefString。实际使用时传递char*或std::string都能够。CefString能够自己主动依据它们构造。 第二个是枚举型的选项(定义在cef_types.h内)。有JSON_PARSER_RFC和JSON_PARSER_ALLOW_TRAILING_COMMAS两个值。后面这个枚举值的意思是同意JSON串最后有一个逗号(以逗号结尾的JSON字符串可能会被标准解析器觉得不合规)。 返回值是CefValue。CefValue是一个通用类型,定义在cef_values.h中,能够代表布尔、整型、双精度浮点数、字符串、二进制、字典、列表这几种类型(在cef_types.h中定义了枚举类型cef_value_type_t)。 CefValue的GetType()方法能够返回实际的数据类型。然后还有GetBool、GetString、GetInt、GetDictionary等用来返回特定类型的数据。*/
    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来存储,不然中文会乱码。
构建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":"梅西"
}



















KenTien 发表于 2025-5-5 19:45:03

mosheng 发表于 2025-3-11 22:44
C++就是灵活些,易语言用起来真是一言难尽

我也开始用易语言的了,确实如你所说

mosheng 发表于 2025-3-11 22:44:05

C++就是灵活些,易语言用起来真是一言难尽
页: [1]
查看完整版本: CEF3专辑-进阶篇-07-JSON的操作