FBrowserCEF3Lib浏览器开发技术交流网址

 找回密码
 立即注册
查看: 3991|回复: 2

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

[复制链接]

签到天数: 32 天

[LV.5]常住居民I

10

主题

34

回帖

554

积分

中级会员LV1

太阳月亮月亮星星

积分
554
发表于 2025-3-11 08:35:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

CEF解析JSON
[C++] 查看源码 复制代码
void CMainFrameWnd::TestParseJson()[/size]
[size=3]{[/size]
[size=3]    std::wstring wstrJson = _T("{");[/size]
[size=3]    wstrJson += _T("\"uid\" : \"chechenluoyang@163.com\",");[/size]
[size=3]    wstrJson += _T("\"fileName\" : \"梅西.txt\",");[/size]
[size=3]    wstrJson += _T("\"time\" : \"2017.07.29 10:55:22\",");[/size]
[size=3]    wstrJson += _T("\"type\" : \"Libcurl HTTP POST JSON \",");[/size]
[size=3]    wstrJson += _T("\"authList\" : \"test\"");[/size]
[size=3]    wstrJson += _T("}");[/size]
[/color][/color][/font][/color]
[color=#000][align=left][font=微软雅黑][size=3]/*第一个參数是带解析的json串,类型是CefString。实际使用时传递char*或std::string都能够。CefString能够自己主动依据它们构造。[/size][/font][/align][align=left][font=微软雅黑][size=3] [/size][/font][/align][align=left][font=微软雅黑][size=3]第二个是枚举型的选项(定义在cef_types.h内)。有JSON_PARSER_RFC和JSON_PARSER_ALLOW_TRAILING_COMMAS两个值。后面这个枚举值的意思是同意JSON串最后有一个逗号(以逗号结尾的JSON字符串可能会被标准解析器觉得不合规)。[/size][/font][/align][align=left][font=微软雅黑][size=3] [/size][/font][/align][align=left][font=微软雅黑][size=3]返回值是CefValue。CefValue是一个通用类型,定义在cef_values.h中,能够代表布尔、整型、双精度浮点数、字符串、二进制、字典、列表这几种类型(在cef_types.h中定义了枚举类型cef_value_type_t)。[/size][/font][/align][align=left][font=微软雅黑][size=3] [/size][/font][/align][align=left][font=微软雅黑][size=3]CefValue的GetType()方法能够返回实际的数据类型。然后还有GetBool、GetString、GetInt、GetDictionary等用来返回特定类型的数据。*/[/size][/font][/align][/color]
[font=微软雅黑][color=#000][color=rgb(51, 51, 51)][color=#000][size=3]    CefRefPtr<CefValue> jsonObject = CefParseJSON(wstrJson, JSON_PARSER_ALLOW_TRAILING_COMMAS);[/size]

[size=3]    if (jsonObject->IsValid())[/size]
[size=3]    {[/size]
[size=3]        CefRefPtr<CefDictionaryValue> dict = jsonObject->GetDictionary();[/size]
[size=3]        CefString strUid = dict->GetString("uid");//得到chechenluoyang@163.com[/size]
[size=3]        CefString strFilename = dict->GetString("fileName");//得到梅西.txt[/size]
[size=3]    }[/size]
[size=3]}[/size]
[size=3]


注:因为我的工程属性设置的是Unicode编码,所以在用字符串拼接的时候用wstring来存储,不然中文会乱码。

构建JSON
[C++] 查看源码 复制代码
void CMainFrameWnd::TestWriteJson()[/size]
[size=3]{[/size]
[size=3]    CefRefPtr<CefDictionaryValue> pDict = CefDictionaryValue::Create();[/size]

[size=3]    pDict->SetInt("id", 9527);[/size]
[size=3]    pDict->SetString("name", _T("梅西"));[/size]

[size=3]    CefRefPtr<CefValue> pValue = CefValue::Create();[/size]

[size=3]    pValue->SetDictionary(pDict);[/size]
[size=3]    std::wstring strJson = CefWriteJSON(pValue, JSON_WRITER_DEFAULT);[/size]
[size=3]}[/size]
[size=3]

生成的JSON串:
[AppleScript] 查看源码 复制代码
{[/size]
[size=3]   "id":9527,[/size]
[size=3]    "name":"梅西"[/size]
[size=3]}[/size]
[size=3]



















签到天数: 32 天

[LV.5]常住居民I

10

主题

34

回帖

554

积分

中级会员LV1

太阳月亮月亮星星

积分
554
 楼主| 发表于 2025-5-5 19:45:03 | 显示全部楼层
mosheng 发表于 2025-3-11 22:44
C++就是灵活些,易语言用起来真是一言难尽

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

签到天数: 695 天

[LV.9]以坛为家II

294

主题

606

回帖

1万

积分

超级版主

皇冠皇冠皇冠太阳

积分
17933

活跃会员热心会员永久VIP会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2025-3-11 22:44:05 | 显示全部楼层
C++就是灵活些,易语言用起来真是一言难尽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们 在线手册 视频教程 赞助支持 CEF官网 易语言官网 火山开发官网
拒绝任何人以任何形式在本网站发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表本网站立场!

网址帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!

Archiver| 手机版| 小黑屋| 联系QQ:283987887 劰载中...

Powered by Discuz! X5.0 GMT+8, 2026-9-17 06:31 , Processed in 0.023205 second(s), 12 queries , Redis On.

 川公网安备51090302000262 蜀ICP备2023034329号
快速回复 返回顶部 返回列表