使用CEF的JSON解析功能

摘要:
实际使用时传递char*或std::string都能够。CefString能够自己主动依据它们构造。第二个是枚举型的选项。有JSON_PARSER_RFC和JSON_PARSER_ALLOW_TRAILING_COMMAS两个值。后面这个枚举值的意思是同意JSON串最后有一个逗号。CefValue是一个通用类型,定义在cef_values.h中,能够代表布尔、整型、双精度浮点数、字符串、二进制、字典、列表这几种类型。CefValue的GetType()方法能够返回实际的数据类型。然后还有GetBool、GetString、GetInt、GetDictionary等用来返回特定类型的数据。好了,有这些背景。就能够来解析JSON串了。其它參考文章详见我的专栏:。

Cef提供了JSON解析功能,在cef_parser.h文件内有三个JSON相关的方法:

  • CefParseJSON
  • CefParseJSONAndReturnError
  • CefWriteJSON

以最简单的CefParseJSON方法来搞个小演示样例演示下使用方法。函数原型例如以下:

CefRefPtr<CefValue> CefParseJSON(const CefString& json_string,
                             cef_json_parser_options_t options);

第一个參数是带解析的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等用来返回特定类型的数据。

好了,有这些背景。就能够来解析JSON串了。

演示样例JSON串(一个简单的Dictionary)例如以下:

{
    "result":0,
    "token":"abc-k-xxx-poi",
    "id":821251852
}

解析代码片段例如以下:

...
CefRefPtr<CefValue> jsonObject = CefParseJSON(strJoinKey, JSON_PARSER_ALLOW_TRAILING_COMMAS);
if (jsonObject->IsValid())
{
    CefRefPtr<CefDictionaryValue> dict = jsonObject->GetDictionary();
    CefString token = dict->GetString("token");
    int id = dict->GetInt("id");
    int result = dict->GetInt("result");
}

就这样吧。

其它參考文章详见我的专栏:【CEF与PPAPI开发】。

免责声明:文章转载自《使用CEF的JSON解析功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android之RadioButton多行centos 7-8 安装 ms sql server 2019下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NanUI for Winform发布,让Winform界面设计拥有无限可能

如今,尽管WPF、UWP大行其道,大有把Winform打残干废的趋势。但是还是有那么一波顽固不化的老家伙们固守着Winform,其中就包括我。 好吧,既然都说Winform做得软件不如WPF界面美观效果绚丽,那么我们就找一个方法让Winform也拥有漂亮的界面。DevExpress和ComponentOne都是不错的选择,Telerik虽说是做Asp.ne...

cef build

BranchesAndBuilding View History This Wiki page provides information about CEF branches and instructions for downloading, building and packaging source code. Note to Editors: Cha...

CISCO快速转发

CISCO快速转发 路由器最基本的功能是在网络中转移报文,这种报文的转移基于一张转发表完成的。路由器对于每一种转发报文的协议都有一张独立的转发表,这些协议可能包括IP,IPX,AppleTalk,MPLS等。 有3种基本的方式实现转发:进程交换干扰交换ASIC(通用集成电路)没有查到干扰交换的具体内容,不做介绍。 进程交换是所有交换方式中最慢的一种。当通过...

QCefView实现与JS的交互

Cef主动向JS通信主要有一种方法:首先在Cef中 QCefEvent event ( const QString& eventName ); //定义一个CEF事件 event.setStringProperty ( const QString& key, const QString& msg ); //为事件添加参数 board...

基于.net开发chrome核心浏览器【三】

本篇我们讲解怎么用CefGlue开发一个最简单的浏览器 一: CefGlue是建立在Cef项目之上的,Cef项目是C/C++的项目;CefGlue只不过是通过PInvoke来访问Cef项目生成的一些dll下面我们来看看Cef项目生成的一些dll和资源都是做什么用的打开这个目录\cef_binary_3.1453.1236_windows_xilium\Re...

CEF拦截js层alert弹窗 OnJSDialog 《转》

一 引言 CEF3嵌入后,用JS 弹出Alert框,按钮错位,确定按钮勉强能看到。很难看。为了改善体验,决定重写提示框。 环境:VS2008  VC  MFC.   二 原理 参看类 CefJSDialogHandler 的说明。 相关类:CefClient CefJSDialogHandler  ClientHandler    三 准备 使用 cef_...