递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 3528|回复: 47
打印 上一主题 下一主题

[视窗] 【源码】PC Easy模块~也许是又一款好用的JSON库[250321更新]

[复制链接]

18

主题

182

帖子

2120

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2120
跳转到指定楼层
楼主
本帖最后由 小小小小鸟 于 2025-3-21 17:20 编辑

火山自带JSON库,由于各种各样的原因(内部有UTF8和UTF16的转码影响效率,json对象取值时是线性查找也影响效率,路径支持不完善等等),不方便使用,便自己写一款,命名有部分仿照易语言E2EE支持库(致敬),有以下特点:
1、【存取键值表】对应【JSON对象类】。【存取列表】对应【JSON数组类】。
2、键值表内部使用哈希表结构(Tessil/ordered-map,同时保证效率和键的顺序),列表内部使用std::vector结构。
3、取值和设置用嵌入式方法,不限参数,尽量方便编写代码,支持JSON PATH,JSON POINTER路径。比如:
        json.置值 ("a", "b", 0, "c", "d", 0, "e", 888)
        json.置值 ("//a.b[0].c.d.[0].['e']", 888)
        json.置值 ("/a/b/0/c/d/0/e", 888)
        最终结果都是等价的:  {"a":{"b":[{"c":{"d":[{"e":888}]}}]}}
        取值同样:
        json.取整数值 ("a", "b", 0, "c", "d", 0, "e")
        json.取整数值 ("//a.b[0].c.d.[0].['e']")
        json.取整数值 ("/a/b/0/c/d/0/e")
        也是等价的。
4、扩展支持存取火山对象和字节集。到Json时,对于字节集,将字节集数据转为base64文本写入结果,对于其它火山对象,将取对象数据转为base64文本写入结果(只支持取对象数据有结果的类)。注意: 从json载入后,base64文本会被识别为文本型,如需还原,字节集:base64文本到字节集(取出的文本);对象:对象.置对象数据(base64文本到字节集(取出的文本))。
5、利用火山宏和火山模板实现指针方便化操作,比如 存取键值表指针 使用方法完全和存取键值表一致,省略 读指针处对象(...)。
6、支持跨模块dll操作存取键值表和存取列表以及它们的指针。重载new和delete,所有内存的申请和释放调用系统api,避免内存泄漏和释放崩溃。
7、优化列表排序使用快速排序法。
8、JSON解析支持原位解析,较正常解析性能提升10%-40%(哈希表结构决定了原位解析无法像YYJSON那样提升明显,但是随机访问时复杂度近乎为O(1),本质为时间和空间的博弈)。注:JSON解析和到JSON用的RapidJSON的SAX风格解析技术,站在巨人的肩膀上,特此标明。
9、.......
欢迎测试使用,如有BUG或者建议,请随帖回复或加入QQ群695360425交流。

压缩包内为模块安装包(安装后为纯源码,无部件)和示例。
250321:优化存取键值表的取键数组和取键列表,进行预分配提速。
新增创建自字节集(从UTF16文本的字节集载入)和到字节集(转为JSON文本后再到字节集)。
修复JSON解析工具一处bug。
250320:
新增跨DLL传递键值表和列表例程。
新增是否为空方法,判断键值表或列表有无子成员。
修复列表指针一处文字性错误。
跨DLL调用示例:

250318: 规范命名和注释。
250317: 修复几处BUG,增加JSON解析工具示例:

游客,如果您要查看本帖隐藏内容请回复









回复

使用道具 举报

9

主题

537

帖子

2564

积分

核心用户

我站在编程的路口往回望,再也看不到那个快乐的代码郎

Rank: 9Rank: 9Rank: 9

积分
2564
沙发
发表于 6 天前 | 只看该作者
沙发沙发,豪华大沙发!
回复

使用道具 举报

0

主题

263

帖子

1657

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1657
板凳
发表于 6 天前 | 只看该作者
学习学习
回复

使用道具 举报

4

主题

73

帖子

1654

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1654
QQ
地板
发表于 6 天前 | 只看该作者
感谢分享
Lizcst Software Lab
回复

使用道具 举报

91

主题

815

帖子

6459

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6459
5#
发表于 6 天前 | 只看该作者
66666666
回复

使用道具 举报

410

主题

1879

帖子

7533

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7533
QQ
6#
发表于 6 天前 | 只看该作者
厉害了。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

51

主题

562

帖子

4486

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4486
7#
发表于 6 天前 | 只看该作者
学习一下
回复

使用道具 举报

6

主题

103

帖子

1732

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1732
8#
发表于 6 天前 | 只看该作者
压缩包内为模块安装包
回复

使用道具 举报

28

主题

2122

帖子

7718

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7718
9#
发表于 6 天前 | 只看该作者
66666 学习
回复

使用道具 举报

91

主题

815

帖子

6459

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6459
10#
发表于 6 天前 | 只看该作者
--- 开始编译项目"json示例":
编译生成对应的C++源文件到目录"C:\Intel\Easy模块示例\json示例\debug\x64\project\"成功 [双击可跳转]
正在链接生成目标文件"C:\Intel\Easy模块示例\json示例\debug\x64\linker\json示例.exe"
所编译程序位数: 64; 所使用 VS 本地编译器版本: 16; 所使用 Windows SDK 版本: 10.0.18362.0(内置)
正在进行本地编译和链接工作(如果是首次编译,由于需要初始化编译环境和相关缓存,速度稍慢是正常的)
错误: 使用所指定的本地编译器编译当前程序失败
错误:
    D:\win_android_chs_free\plugins\vprj_win\classlib\user\\Easy模块\\src\\json\\vol_json.h(1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    D:\win_android_chs_free\plugins\vprj_win\classlib\user\Easy模块\src\json\../common/vol_common.h(108): error C2065: “PF_SSE4_2_INSTRUCTIONS_AVAILABLE”: 未声明的标识符
    D:\win_android_chs_free\plugins\vprj_win\classlib\user\\Easy模块\\src\\json\\vol_json.h(982): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    D:\win_android_chs_free\plugins\vprj_win\classlib\user\\Easy模块\\src\\json\\vol_json.h(1752): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
编译生成目标文件"C:\Intel\Easy模块示例\json示例\debug\x64\linker\json示例.exe"失败,耗费时间 1265 毫秒.
--- 项目"json示例"编译或链接失败. 编译过程中共遇到了 0 个警告, 2 个错误.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-3-23 15:50 , Processed in 0.112323 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表