开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3181|回复: 16
收起左侧

[易语言纯源码] 美化JSON代码 2.0

[复制链接]
结帖率:36% (4/11)
发表于 2022-12-26 18:42:10 | 显示全部楼层 |阅读模式   湖南省衡阳市
分享源码
界面截图: -
是否带模块: -
备注说明: -
今天在解析快手的视频的时候,将快手的json使用代码美化了一下发现了一些问题
在第一个贴子我置顶评论说不知道部分代码的用处,在现在我读懂了
我也进行了代码上的改进
关于inString这个变量我的理解是,是否在引号文本中
本次改进主要是针对inString的判断,和代码的优化
也加上了一些注释,简单易懂,不懂评论
好了,接下来是代码部分
喜欢就点个赞吧,谢谢

  
子程序名返回值类型公开备 注
JSON美化文本型 
参数名类 型参考可空数组备 注
json文本文本型
变量名类 型静态数组备 注
临时数组文本型0
i整数型 
临时文本文本型 
tab整数型 
inString逻辑型 
c文本型 
临时文本2文本型 
临时数组 = 分割文本 (json文本, #换行符, )  ' 去前后空
计次循环首 (取数组成员数 (临时数组), i)
临时文本 = 临时文本 + 临时数组 [i]
计次循环尾 ()
计次循环首 (取文本长度 (临时文本), i)
c = 取文本中间 (临时文本, i, 1)
如果真 (c = #换行符 c = 到文本 ({ 10 }))  ' 文本去无用换行符
c = “”

如果 (inString)
如果真 ( (c = #引号 c = “'”) 取文本中间 (临时文本, i - 1, 1)“\”)  ' 如果前面无转义符,就是单纯的 " 那就代表出引号了(意思就是现在c为后引号) ,有转义符代表还在引号范围
inString = 假

如果 (取反 (inString) (c = #引号 c = “'”))  ' 判断是否为前引号
inString = 真
如果 (取反 (inString) c = “ ”)
到循环尾 ()  ' 没有引号引住的文本去空 原代码应该是 c = "",现在改为 到循环尾()
如果 (取反 (inString) c = “:”)
c = c + “ ”  ' 为了美观
如果 (取反 (inString) c = “,”)
c = c + #换行符取空白文本 (tab × 2)  ' 加缩进,"×2"代表两个空格
如果 (取反 (inString) (c = “[” c = “{”))
tab = tab + 1  ' 加缩进数
c = c + #换行符取空白文本 (tab × 2)
如果 (取反 (inString) (c = “]” c = “}”))
tab = tab - 1  ' 减缩进数
c = #换行符取空白文本 (tab × 2) + c








临时文本2 = 临时文本2 + c
计次循环尾 ()
返回 (临时文本2)

改进后生成的美化json

改进后生成的美化json

评分

参与人数 1精币 +2 收起 理由
kyo9766 + 2 感谢分享,很给力!~

查看全部评分


结帖率:100% (3/3)

签到天数: 17 天

发表于 2022-12-27 15:28:43 | 显示全部楼层   山东省青岛市
本帖最后由 kyo9766 于 2022-12-27 16:25 编辑

能加上一个选择,数组是否拆行,就更完美了,稍微修改了一下,数组只有值的时候,不拆行,数组内嵌JSON数据时拆行,感谢分享

  
子程序名返回值类型公开备 注
JSON美化_4文本型 
参数名类 型参考可空数组备 注
参数_json文本文本型
参数_是否拆分数组逻辑型真(默认)拆分数组,假不拆分数组
变量名类 型静态数组备 注
局部_数组文本型0
局部_i整数型 
局部_文本文本型 
局部_tab整数型 
局部_inString逻辑型 
局部_c文本型 
局部_文本2文本型 
局部_数组进入逻辑型 
局部_数组JSON逻辑型 
局部_是否拆行逻辑型 
局部_数组 = 分割文本 (参数_json文本, #换行符, )  ' 去前后空
参数_是否拆分数组 = 选择 (是否为空 (参数_是否拆分数组), 真, 参数_是否拆分数组)
计次循环首 (取数组成员数 (局部_数组), 局部_i)
局部_文本 = 局部_文本 + 局部_数组 [局部_i]
计次循环尾 ()
计次循环首 (取文本长度 (局部_文本), 局部_i)
局部_c = 取文本中间 (局部_文本, 局部_i, 1)
如果真 (局部_c = #换行符 局部_c = 到文本 ({ 10 }))  ' 文本去无用换行符
局部_c = “”

如果 (局部_inString)
如果真 ( (局部_c = #引号 局部_c = “'”) 取文本中间 (局部_文本, 局部_i - 1, 1)“\”)  ' 如果前面无转义符,就是单纯的 " 那就代表出引号了(意思就是现在c为后引号) ,有转义符代表还在引号范围
局部_inString = 假

如果 (取反 (局部_inString) (局部_c = #引号 局部_c = “'”))  ' 判断是否为前引号
局部_inString = 真
如果 (取反 (局部_inString) 局部_c = “ ”)
到循环尾 ()  ' 没有引号引住的文本去空 原代码应该是 c = "",现在改为 到循环尾()
如果 (取反 (局部_inString) 局部_c = “:”)
局部_c = 局部_c + “ ”  ' 为了美观


如果 (参数_是否拆分数组 = )
如果 (取反 (局部_inString) 局部_c = “,”)
局部_c = 局部_c + #换行符取空白文本 (局部_tab × 2)  ' 加缩进,"×2"代表两个空格


如果 (取反 (局部_inString) (局部_c = “[” 局部_c = “{”))
局部_tab = 局部_tab + 1  ' 加缩进数
局部_c = 局部_c + #换行符取空白文本 (局部_tab × 2)
如果 (取反 (局部_inString) (局部_c = “]” 局部_c = “}”))
局部_tab = 局部_tab - 1  ' 减缩进数
局部_c = #换行符取空白文本 (局部_tab × 2) + 局部_c







如果真 (局部_c = “[”)
局部_数组进入 = 真

如果真 (局部_数组进入 局部_c = “{”)  ' 这部分逻辑完成,实现 【 { 不分层
局部_数组进入 = 假

如果真 (局部_c = “]”)
局部_数组进入 = 假

如果 (取反 (局部_inString) 局部_c = “,” 局部_数组进入 = )
局部_c = 局部_c + #换行符取空白文本 (局部_tab × 2)  ' 加缩进,"×2"代表两个空格



如果 (取反 (局部_inString) 局部_c ≠ “[” 局部_c = “{”)
局部_tab = 局部_tab + 1  ' 加缩进数
局部_c = 局部_c + #换行符取空白文本 (局部_tab × 2)
如果 (取反 (局部_inString) 局部_c ≠ “]” 局部_c = “}”)
局部_tab = 局部_tab - 1  ' 减缩进数
局部_c = #换行符取空白文本 (局部_tab × 2) + 局部_c









局部_文本2 = 局部_文本2 + 局部_c
计次循环尾 ()
返回 (局部_文本2)



QQ截图20221227153728.jpg

点评

如果能做到【猿如意】的【JSON编辑器】那般快速就好了,因为一旦量大了(10w字符以上),你这个基本上就得卡死,而猿如意的秒解析   广东省*  发表于 2022-12-28 21:06
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)
发表于 2024-5-25 16:31:42 | 显示全部楼层   浙江省衢州市
回复 支持 反对

使用道具 举报

发表于 2024-5-10 22:39:41 | 显示全部楼层   江苏省苏州市
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2022-12-28 21:25:00 | 显示全部楼层   湖北省黄冈市
谢谢分享,值得学习啊。
回复 支持 反对

使用道具 举报

发表于 2022-12-28 17:12:02 | 显示全部楼层   湖北省黄石市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:44% (4/9)

签到天数: 14 天

发表于 2022-12-28 08:27:19 | 显示全部楼层   浙江省绍兴市
感谢分享!
回复 支持 反对

使用道具 举报

发表于 2022-12-27 17:30:36 | 显示全部楼层   陕西省西安市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:73% (8/11)

签到天数: 24 天

发表于 2022-12-27 15:09:39 | 显示全部楼层   河南省焦作市
感谢分享!
回复 支持 反对

使用道具 举报

结帖率:80% (8/10)
发表于 2022-12-27 12:20:44 | 显示全部楼层   广西壮族自治区来宾市
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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