火山软件开发平台

标题: 【开源】水淼JSON类 - 使用火山编写的高性能读写JSON [打印本页]

作者: shuimiao    时间: 2021-6-11 18:27
标题: 【开源】水淼JSON类 - 使用火山编写的高性能读写JSON
本帖最后由 shuimiao 于 2021-6-12 00:36 编辑
本模块仅供交流学习JSON格式解析,建议规范使用JOSN解析,遵循JSON基本规范。
  1. 2021年6月11日 22:23:31 补上了取字节集字节()和置字节集字节()方法,并修改这2个方法不用去改库就能运行
  2. 2021年6月11日 23:32:51 修复了置字节集字节()方法整数型溢出的问题,并修改相关方法前缀为_
  3. 2021年6月12日 00:30:42 添加子节点()方法补上参考返回添加后的子节点。该方法支持重复键名,不符合json规范,请慎用,建议使用 子节点() 方法就不会发生重名。
复制代码



水淼JSON类除了支持JSON基本解析规则之外,还独家增强:

1、键值对的单双引号混合识别
2、键值对的无引号识别
3、空白键名识别(允许对象内容像数组内容那样只给出键值而没有键名)
4、重复键名识别(按序号定义,如 键名->5 代表第6个重名的键名)
5、并列多组不同来源的JSON数据识别
6、通过解析文件流的方式对无限大文件(如10G)的指定路径的读取。
7、读写编码为Unicode,故支持万国语言。
8、全方位优化解析和读写数据的速度,远超市面JSON类库。


水淼JSON类相对火山自带的JSON数据访问支持类库,解析速度差不多,但是读数据的速度是火山自带的不知道多少倍了(实测10MB文件,相同路径访问,水淼只要0毫秒,火山自带的要几十秒),而且水淼的读写数据的语法简单,直接给出路径一步到位取出数据,也可以逐级取出数据()。

(, 下载次数: 86)

(, 下载次数: 65)
(, 下载次数: 73)





作者: mmmww    时间: 2021-6-11 18:46
牛逼:噜阿噜:噜阿噜
作者: 大强    时间: 2021-6-11 19:00
学习……
作者: zgj9911    时间: 2021-6-11 19:26
:噜阿噜下来试试
作者: 安卓小助手    时间: 2021-6-11 19:28
强烈顶起
作者: oka32    时间: 2021-6-11 19:40
RE: 【开源】水淼JSON类 - 使用火山编写的高性能读写JSON [修改]
作者: nurjay    时间: 2021-6-11 19:53
强烈顶起!!!
作者: guo828587    时间: 2021-6-11 19:57
这个必须支持
作者: 呵呵仙8    时间: 2021-6-11 20:06
谢谢!学习!!
作者: 0晨鹤0    时间: 2021-6-11 20:10
楼主NB,但说一下个人想法 仅供探讨。

我觉得最好还是严格遵守 RFC 7159 所定义的 JSON 规范。对于单双引号混合/重复键名识别这些功能,尽量不要做出来。如果有一天楼主的库被火伴广泛使用,就或多或少对整个(至少火山圈子里)的 json 规范造成冲击。一旦规范被打破,则失去了规范的意义。

json不支持注释语法,其中一个重要原因就是 xml 的注释被滥用从而衍生出私有语法,使得 xml 通用性大大降低。
如果自己项目需要,可以私下实现。一旦公开发出来,也许一些开发者无意中明明不需要这些增强的也顺手使用,结果一发不可收拾。

作者: shuimiao    时间: 2021-6-11 20:22
本帖最后由 shuimiao 于 2021-6-11 20:24 编辑
0晨鹤0 发表于 2021-6-11 20:10
楼主NB,但说一下个人想法 仅供探讨。

我觉得最好还是严格遵守 RFC 7159 所定义的 JSON 规范。对于单双引 ...

你说的我没有想过。不过我觉得这应该没什么影响吧,这是独属火山的增强。而且我这个人总喜欢创造出特色,强迫症没办法。写节点时默认都是双引号,是符合统一规范的
作者: 呵呵仙8    时间: 2021-6-11 20:25
一个类写了1m的源码!!你也太牛了!!

<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 199: 错误: 没有找到所指定的方法名称"置字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 216: 错误: 没有找到所指定的方法名称"置字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 232: 错误: 没有找到所指定的方法名称"置字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 247: 错误: 没有找到所指定的方法名称"置字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 930: 错误: 没有找到所指定的方法名称"取字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 1171: 错误: 没有找到所指定的方法名称"取字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 1173: 错误: 没有找到所指定的方法名称"取字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 1181: 错误: 没有找到所指定的方法名称"取字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 1193: 错误: 没有找到所指定的方法名称"取字节集字节"
是什么的命令??
作者: nurjay    时间: 2021-6-11 20:28
我这也是最新版,怎么少了“置字节集字节”这个命令?
作者: 小蜗牛    时间: 2021-6-11 20:29
下载来看看
作者: hzxsxds01    时间: 2021-6-11 20:36
支持支持
作者: aycap    时间: 2021-6-11 20:36
水淼JSON类
作者: shuimiao    时间: 2021-6-11 20:42
呵呵仙8 发表于 2021-6-11 20:25
一个类写了1m的源码!!你也太牛了!!

, 199: 错误: 没有找到所指定的方法名称"置字节集字节"

我补上这个方法了,重新下载
作者: shuimiao    时间: 2021-6-11 20:43
nurjay 发表于 2021-6-11 20:28
我这也是最新版,怎么少了“置字节集字节”这个命令?

我补上这个方法了,重新下载
作者: 呵呵仙8    时间: 2021-6-11 20:53
1m的文件,直接作为库分享得了!!
作者: 创世魂    时间: 2021-6-11 20:54
0晨鹤0 发表于 2021-6-11 20:10
楼主NB,但说一下个人想法 仅供探讨。

我觉得最好还是严格遵守 RFC 7159 所定义的 JSON 规范。对于单双引 ...

+1   能够独立开发JSON解析类库是好事。但是这种容错处理就没有必要公开出来。破坏JSON规范格式。不强烈不推荐的。

就好像ini配置文件增加了数组,还能叫ini吗??

当然开源也是好事,但是请不要冠名JSON,你这个已经超出JSON范畴,你可以起个别的名字。但是绝对不能叫JSON。
作者: 创世魂    时间: 2021-6-11 20:58
shuimiao 发表于 2021-6-11 20:22
你说的我没有想过。不过我觉得这应该没什么影响吧,这是独属火山的增强。而且我这个人总喜欢创造出特色, ...

影响很大的亲。。。你是在火山用了,但是火山的用户终究不会一辈子用火山。早晚一天会扩散出去。。蝴蝶效应总知道吧。。。。
作者: 呵呵仙8    时间: 2021-6-11 20:59
建议写类,公开的方法。以"_"开头起名,用于区分开火山的自带的方法!!
作者: 呵呵仙8    时间: 2021-6-11 21:02
--- 开始编译项目"水淼JSON类":
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 1211: 错误: 没有找到所指定的方法名称"取字节集字节"
<E:\水淼JSON类v1.0.0.0发布于2021年6月11日\水淼JSON类\smJson.v>, 1223: 错误: 没有找到所指定的方法名称"取字节集字节"
--- 项目"水淼JSON类"编译或连接失败. 编译过程中共遇到了 0 个警告, 2 个错误.
作者: 呵呵仙8    时间: 2021-6-11 21:03
本帖最后由 呵呵仙8 于 2021-6-11 21:04 编辑

这个是你自己加入到基础库的吗?字节集类变量的
作者: shuimiao    时间: 2021-6-11 21:04
呵呵仙8 发表于 2021-6-11 20:53
1m的文件,直接作为库分享得了!!

我之前也封装了个库,不知道为什么不行。。不过直接源码文件添加到自己的项目,一样使用,也是很方便的
作者: 呵呵仙8    时间: 2021-6-11 21:08
shuimiao 发表于 2021-6-11 21:04
我之前也封装了个库,不知道为什么不行。。不过直接源码文件添加到自己的项目,一样使用,也是很方便的 ...

我也不会自动生成安装包库.都是手动放到支持库文件夹的
作者: shuimiao    时间: 2021-6-11 21:11
呵呵仙8 发表于 2021-6-11 21:03
这个是你自己加入到基础库的吗?字节集类变量的

重新下载新的源码,就有这个置字节集字节()方法了,这个是我根据字节集类内部相关命令改写的,也是要放到类内部去,不会影响原先功能
作者: 伟业    时间: 2021-6-11 21:13
赞一个!
作者: shuimiao    时间: 2021-6-11 21:14
创世魂 发表于 2021-6-11 20:58
影响很大的亲。。。你是在火山用了,但是火山的用户终究不会一辈子用火山。早晚一天会扩散出去。。蝴蝶效 ...

我觉得这个没什么吧,如果是要与其它语言对接,默认写数据就是符合标准规范的。如果是火山内部用,那增强一点不是更好吗
作者: 伟业    时间: 2021-6-11 21:23
牛人
作者: 呵呵仙8    时间: 2021-6-11 21:34
shuimiao 发表于 2021-6-11 21:14
我觉得这个没什么吧,如果是要与其它语言对接,默认写数据就是符合标准规范的。如果是火山内部用,那增强 ...

是取,不是置,你第2次修改上转了吗?
作者: 小蜗牛    时间: 2021-6-11 21:35
不遵循标准...你这个源码下载下来...没有一个人可以直接用....
作者: shuimiao    时间: 2021-6-11 21:37
小蜗牛 发表于 2021-6-11 21:35
不遵循标准...你这个源码下载下来...没有一个人可以直接用....

怎么会,任何标准json数据都能解析。只是增强,又不是乱改
作者: shuimiao    时间: 2021-6-11 21:38
呵呵仙8 发表于 2021-6-11 21:34
是取,不是置,你第2次修改上转了吗?

最新下载取和置都有
作者: 小蜗牛    时间: 2021-6-11 21:39
shuimiao 发表于 2021-6-11 21:37
怎么会,任何标准json数据都能解析。只是增强,又不是乱改

没有..我不是说JSON标准...我是说没有使用火山标准,改火山的库....
作者: 呵呵仙8    时间: 2021-6-11 21:39
出大量教程。世界都以shuimiao标准走!!
作者: shuimiao    时间: 2021-6-11 21:46
小蜗牛 发表于 2021-6-11 21:39
没有..我不是说JSON标准...我是说没有使用火山标准,改火山的库....

源码里我有说明,那个取字节集字节()和置字节集字节()是增强方法,直接复制到字节集类内部就能用,也不会影响字节集类原先功能。我也不想写这个方法,关键是火山没有啊。其实不用放字节集类内部也可以,只是那样效率差了点。
作者: 呵呵仙8    时间: 2021-6-11 21:47
(, 下载次数: 33)
不会是我的高速固态盘数据串乱了吧!?

作者: shuimiao    时间: 2021-6-11 21:47
呵呵仙8 发表于 2021-6-11 21:39
出大量教程。世界都以shuimiao标准走!!

能运行了吧,现在这个源码里就有例程,基本用法都有了
作者: 呵呵仙8    时间: 2021-6-11 21:50
不好意思。你用了变量自带的方法报错了!!目标字节集.去掉就OK了!!
作者: shuimiao    时间: 2021-6-11 21:51
呵呵仙8 发表于 2021-6-11 21:47
不会是我的高速固态盘数据串乱了吧!?

最新下载有这2个方法的

(, 下载次数: 42)

作者: 小蜗牛    时间: 2021-6-11 21:56
另外...报告一个BUG
{a:1,a:2,a:3,b:[b1,b2,b3,null,5],"测试\"":1236}
楼主测试一下这个JSON...
作者: dengzf    时间: 2021-6-11 21:57
这个牛气
作者: lvzhi_123    时间: 2021-6-11 22:00

强烈顶起
作者: 呵呵仙8    时间: 2021-6-11 22:01
火山系统发布的库尽量不要自己修改!!这样不方便交流分享!!想更优化它们,可自行建一个自己的模块,复过来改名优化!!
作者: shuimiao    时间: 2021-6-11 22:02
小蜗牛 发表于 2021-6-11 21:56
另外...报告一个BUG
{a:1,a:2,a:3,b:,"测试\"":1236}
楼主测试一下这个JSON...

好像正常
(, 下载次数: 34) (, 下载次数: 28)


作者: 小蜗牛    时间: 2021-6-11 22:03
shuimiao 发表于 2021-6-11 22:02
好像正常

这是不正常的..
作者: 呵呵仙8    时间: 2021-6-11 22:20
(, 下载次数: 39) 哎,真麻烦!!解决方案!!只能把你两方法放到官方库!!或自己再写一个子程序代码!!我还是用后者吧!!

作者: shuimiao    时间: 2021-6-11 22:26
呵呵仙8 发表于 2021-6-11 22:20
哎,真麻烦!!解决方案!!只能把你两方法放到官方库!!或自己再写一个子程序代码!!我还是用后者吧!! ...

刚才我重新修改了下,不用去改库了。。重新下载最新源码就行
作者: shuimiao    时间: 2021-6-11 22:28
小蜗牛 发表于 2021-6-11 21:35
不遵循标准...你这个源码下载下来...没有一个人可以直接用....

这个我刚才修改了下源码,不用去改库了,最新源码直接就能运行。改库确实是个麻烦
作者: wtuauwfn    时间: 2021-6-11 22:47
这个可以有,好好学习一下
作者: smk718    时间: 2021-6-11 22:58
厉害~~顶一个!!!
作者: shuimiao    时间: 2021-6-11 23:14
呵呵仙8 发表于 2021-6-11 21:39
出大量教程。世界都以shuimiao标准走!!

之前你问过如何在类内部取类指针,这个源码里就有方法,这样:@ @<类指针变量> = (intptr_t)this;
作者: 呵呵仙8    时间: 2021-6-11 23:15
(, 下载次数: 39)
你的取字节集字节好像没问题!!置字节集字节只是修改原有栈的一个字节吗?还是4字节?你应该是修改了4字节整数!!
还是置字节集字节只是指定位置插入多一个字节成员??你这样在原有栈强塞会益出吧??

作者: 暴风    时间: 2021-6-11 23:18
学习…
作者: 呵呵仙8    时间: 2021-6-11 23:21
shuimiao 发表于 2021-6-11 23:14
之前你问过如何在类内部取类指针,这个源码里就有方法,这样:@ @ = (intptr_t)this; ...

(, 下载次数: 47)
谢谢!我找到好几天了!那次我只是想叫官方加入到基础库中去而己!!

作者: niulin1    时间: 2021-6-11 23:31
你超越了,优秀!
既然被人认为你的这个优秀过了,干脆叫水淼数据类了~~~免得别人伤心~~:噜阿噜:噜阿噜








牛鼻!!!支持大佬开源!!!!


作者: shuimiao    时间: 2021-6-11 23:40
呵呵仙8 发表于 2021-6-11 23:15
你的取字节集字节好像没问题!!置字节集字节只是想修改原有栈的一个字节吗?还是4字节?你应该是修改了4 ...

谢谢你的提醒,我遗忘了这点,最新源码已经修正,也就是加一个(字节)的强转就不会溢出了。并且把相关方法前缀修改成了_
作者: 呵呵仙8    时间: 2021-6-11 23:43
shuimiao 发表于 2021-6-11 23:40
谢谢你的提醒,我遗忘了这点,最新源码已经修正,也就是加一个(字节)的强转就不会溢出了 ...

嗯,用处是修改一个节字,不追加插入?
作者: 小蜗牛    时间: 2021-6-11 23:44
呵呵仙8 发表于 2021-6-11 23:21
谢谢!我找到好几天了!那次我只是想叫官方加入到基础库中去而己!!
...

新版已经加了,不过还没有发出来
包括:
1 创建对象指针()
2 释放对象指针()
3 分配内存()
4 重分配内存()
5 释放内存()
6 取对象自身指针()

作者: shuimiao    时间: 2021-6-11 23:48
呵呵仙8 发表于 2021-6-11 23:43
嗯,用处是修改一个节字,不追加插入?

这个置字节集字节()不用插入的,是直接修改某个位置的字节为新的字节。跟取字节集字节()相对应的
作者: 桐人dx    时间: 2021-6-12 00:02
看一看.........
作者: xbp2015    时间: 2021-6-12 00:05
666666666666666666
作者: 呵呵仙8    时间: 2021-6-12 00:08
shuimiao 发表于 2021-6-11 23:48
这个置字节集字节()不用插入的,是直接修改某个位置的字节为新的字节。跟取字节集字节()相对应的 ...

(, 下载次数: 2)
再次感谢!希望老大多出使用例子。己做成模块调用!有BUG的话,多修改分享!谢谢!!


作者: 呵呵仙8    时间: 2021-6-12 00:10
小蜗牛 发表于 2021-6-11 23:44
新版已经加了,不过还没有发出来
包括:
1 创建对象指针()

谢谢,告知!!
作者: zhangcm    时间: 2021-6-12 00:21
学习……
作者: 2995455338    时间: 2021-6-12 01:14
666666666666
作者: fengyishen    时间: 2021-6-12 01:23
支持,下载学习
作者: zj4f    时间: 2021-6-12 09:15
支持,感谢分享
作者: langui8899    时间: 2021-6-12 10:13

强烈顶起
作者: jiaozhu    时间: 2021-6-12 11:39
学习来~!~!~
作者: 米粒    时间: 2021-6-12 13:27
很棒!!!!!!
作者: 朕的    时间: 2021-6-12 14:09
下载试试看 有多厉害  能0毫秒
作者: 1051496412    时间: 2021-6-12 14:20
感谢分享
作者: 67564226    时间: 2021-6-12 17:19
底层使用JOSN规范,其它的扩展,不用理会,这是动了谁蛋糕了啊。  

按自己的想法扩展下去就行了
作者: huniu9981    时间: 2021-6-12 17:54
牛X

作者: 秋天的童话    时间: 2021-6-12 22:42
感谢开源分享
作者: ynxyzl    时间: 2021-6-13 11:06

谢谢!学习!!
作者: jstion    时间: 2021-6-13 11:07

牛逼:噜阿噜:噜阿噜
作者: hmyroot    时间: 2021-6-13 12:59
支持创新!
作者: 菜鸟龙    时间: 2021-6-13 14:19
6666666666666
作者: zqiz    时间: 2021-6-13 15:59
水淼JSON类 - 使用火山编写的高性能读写JSON
作者: hongjian    时间: 2021-6-13 17:32
水淼JSON解析助手,一直很好用
作者: redxblue    时间: 2021-6-13 18:18
谢谢!学习!!
作者: leiyanglie    时间: 2021-6-13 18:26
学习牛逼霍霍
作者: lhy984493    时间: 2021-6-13 18:47
看看这牛逼的东西
作者: wxq    时间: 2021-6-14 14:05
超级牛B,就是需要楼主这样的。感谢分享。
作者: a870840081    时间: 2021-6-14 14:59
看看
作者: 次元の叶子    时间: 2021-6-14 16:17
感谢分享!!!
作者: 好人好    时间: 2021-6-14 16:25
先回复一下,再看内容
作者: qq812913329    时间: 2021-6-14 22:53
sssssssss
作者: lichenxui    时间: 2021-6-14 23:25
收下学习
作者: youxii1001    时间: 2021-6-15 12:34
学习下
作者: a6435525    时间: 2021-6-15 13:16
谢谢!学习!!
作者: hejin8288    时间: 2021-6-15 15:59
历害,火山库越来越多了
作者: 网络注册会员    时间: 2021-6-15 16:13
这个必须支持
作者: htpmcj    时间: 2021-6-15 21:59
:噜阿噜下来试试
作者: 一叶之秋    时间: 2021-6-15 22:08

谢谢!学习!!
作者: 追梦软件    时间: 2021-6-16 10:57
感谢分享
作者: 追梦软件    时间: 2021-6-16 10:58
怎么还是看不叫




欢迎光临 火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4