开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 42277|回复: 38
收起左侧

[易语言支持库] 易语言JSON解析支持库,支持复杂格式解析/生成,常用编码转换等功能。

[复制链接]
结帖率:82% (9/11)
发表于 2017-5-3 13:52:28 | 显示全部楼层 |阅读模式   广东省深圳市
本帖最后由 黑猫よ__ 于 2017-5-3 13:55 编辑

          JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,它基于ECMAScript规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


      本支持库以开源库《JSONCPP》为基础,进行扩展开发而来,支持标准JSON格式数据的解析和生成。


1111.png


解析例子:


{
"test1":"Hello World!",
"test2":100,
"test3":3.14,
"test4":true,
"test5":4294967296,
"test6":{"child1":"1111","child2":"2222"},
"array":[{"app1":"aaaa","app2":"bbbb"},{"app1":"cccc","app2":"dddd"}]
}

  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
ReaderJson::ReaderJSON解析引擎
RootJson::Value根节点对象
ArrayJson::Value数组对象
i整数型 
test1Json::Value 
判断 (Reader.从文本解析 ( #常量1, Root))
调试输出 (Root.At (“test1”).asString ())  ' 输出文本型值
调试输出 (Root.At (“test2”).asInt ())  ' 输出整数型值
调试输出 (Root.At (“test3”).asDouble ())  ' 输出双精度小数型值
调试输出 (Root.At (“test4”).asBool ())  ' 输出逻辑型值
调试输出 (Root.At (“test5”).asInt64 ())  ' 输出长整数型值
调试输出 (“===========================================================”)
调试输出 (Root.At (“test6”).At (“child1”).asString ())  ' 取出JSON对象中的成员值
调试输出 (“===========================================================”)
Array = Root.At (“array”)
如果真 (Array.isArray ())  ' 是否为数组对象
调试输出 (“数组长度:”, Array.Length ())
计次循环首 (Array.Length (), i)
调试输出 (i, Array.Index (i - 1).At (“app1”).asString ())  ' 数组下标从0开始,取出数组对象中的成员值
计次循环尾 ()
调试输出 (“===========================================================”)
test1 = Root.At (“test1”)
调试输出 (“状态判断:”)
调试输出 (“是否为文本型: ”, test1.isString ())
调试输出 (“是否为逻辑型: ”, test1.isBool ())
调试输出 (“是否为整数型: ”, test1.isInt ())
调试输出 (“是否为双精度小数型: ”, test1.isDouble ())
调试输出 (“是否为长整数型: ”, test1.isInt64 ())
调试输出 (“是否为空: ”, test1.isNull ())
调试输出 (“是否为对象: ”, test1.isObject ())
调试输出 (“是否为数组: ”, test1.isArray ())


调试输出 (“解析失败,错误信息: ”, Reader.取错误信息 ())

标准输入 ()
返回 (0)  ' 可以根据您的需要返回任意数值



i支持库列表   支持库注释   
JsonReader(未知支持库)
spec特殊功能支持库


* “Hello World!”
* 100
* 3.140000
* 真
* 4294967296
* “===========================================================”
* “1111”
* “===========================================================”
* “数组长度:” | 2
* 1 | “aaaa”
* 2 | “cccc”
* “===========================================================”
* “状态判断:”
* “是否为文本型: ” | 真
* “是否为逻辑型: ” | 假
* “是否为整数型: ” | 假
* “是否为双精度小数型: ” | 假
* “是否为长整数型: ” | 假
* “是否为空: ” | 假
* “是否为对象: ” | 假
* “是否为数组: ” | 假

生成例子:

  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
RootJson::Value根对象
ObjectJson::Value子对象
ArrayJson::Value数组对象
item1Json::Value数组成员对象
item2Json::Value数组成员对象
Root.Add (“test1”, “1111”)  ' 添加文本型值
' Root.Add (“test1”, 100)  ' 修改"test1"的值
Root.Add (“test2”, 1024)  ' 添加整数型值
Root.Add (“test3”, )  ' 添加逻辑型值
Root.Add (“test4”, #pi )  ' 添加双精度小数型值
Root.Add (“test5”, 4294967296)  ' 添加长整数型值
' ========================================================
Object.Add (“child1”, “1111”)
Object.Add (“child2”, “2222”)
Root.Add (“object”, Object)  ' 添加JSON对象
' ========================================================
item1.Add (“min”, “aaaa”)
item1.Add (“max”, “bbbb”)
item2.Add (“min”, “cccc”)
item2.Add (“max”, “dddd”)
Array.Append (item1)  ' 将item1对象加入数组
Array.Append (item2)  ' 将item2对象加入数组
Root.Add (“array”, Array)  ' 将数组对象加入到根对象中
' ========================================================
信息框 (Root.toStyledString (), 0, , )  ' 输出带格式的JSON文本。
标准输入 ()
返回 (0)  ' 可以根据您的需要返回任意数值



i支持库列表   支持库注释   
JsonReader(未知支持库)


2222.png


常用编码转换例子:

  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
调试输出 (A2W (“你好!”))  ' ANSI转Unicode
调试输出 (W2A ({ 96, 79, 125, 89, 33, 0, 0, 0 }))  ' Unicode转ANSI
调试输出 (A2T (“你好!”))  ' ANSI转UTF-8
调试输出 (T2A (“浣犲ソ!”))  ' UTF-8转ANSI
' ======================================================
' 常用格式化字符串转换
调试输出 (格式化字符串 (“你好!”, 真, 0))  ' 将文本转换为: \u0031\u0031 ,这样的编码
调试输出 (格式化字符串 (“\u4f60\u597d\u0021\ubaad\uf00d”, 假, 0))  ' 将格式化字符串编码转回文本
调试输出 (格式化字符串 (“你好!”, 真, 1))  ' 将文本转换为: %u0031%u0031 ,这样的编码
调试输出 (格式化字符串 (“%u4f60%u597d%u0021%ubaad%uf00d”, 假, 1))  ' 将格式化字符串编码转回文本
调试输出 (格式化字符串 (“你好!ABC D”, 真, 2))  ' 将文本转换为: %E4%BD%A0%E5%A5%BD%21ABC%20D ,这样的编码(URL编码)
调试输出 (格式化字符串 (“%E4%BD%A0%E5%A5%BD%21ABC%20D”, 假, 2))  ' 将格式化字符串编码转回文本
标准输入 ()
返回 (0)  ' 可以根据您的需要返回任意数值



i支持库列表   支持库注释   
spec特殊功能支持库
JsonReader(未知支持库)


转换结果:

* 字节集:8{96,79,125,89,33,0,0,0}
* “你好!”
* “浣犲ソ!”
* “你好!”
* “\u4f60\u597d\u0021\ubaad\uf00d”
* “你好!”
* “%u4f60%u597d%u0021%ubaad%uf00d”
* “你好!”
* “%E4%BD%A0%E5%A5%BD%21ABC%20D”
* “你好!ABC D”



=======================================================
支持库下载:
链接: https://pan.baidu.com/s/1slGv1il 密码: mph2



评分

参与人数 3好评 +2 精币 +5 收起 理由
yijay + 1 感谢分享,很给力!~
小明无敌 + 1 + 3 支持开源~!感谢分享
冯古屋 + 1 + 1 此处应该有鼓励~

查看全部评分

本帖被以下淘专辑推荐:

发表于 2023-5-23 16:12:47 | 显示全部楼层   河南省平顶山市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2022-9-29 09:00:10 | 显示全部楼层   山东省临沂市
path.fne                                          
回复 支持 反对

使用道具 举报

结帖率:98% (125/127)

签到天数: 9 天

发表于 2021-6-3 17:46:25 | 显示全部楼层   福建省福州市
无法静态编译,asint有问题
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:04:45 | 显示全部楼层   江苏省苏州市
另外从文件解析不了
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:04:03 | 显示全部楼层   江苏省苏州市
本帖最后由 NewLemon 于 2020-3-6 18:10 编辑

本帖最后由 NewLemon 于 2020-3-6 18:02 编辑   对于不规正json解析不了 [{"symbol": "1",
"name": "1",
"trade": "1",


},{
"symbol": "1",
"name": "1",
"trade": "1",

},{
"symbol": "1",
"name": "1",
"trade": "1",


}],这样的xx完全解析不了。另外精易模块JSON可以解析,速度相当慢。web客户支持库可以解析,但是获取不到xx。其他JSON都测试全部取货不到
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2019-12-25 21:22:40 | 显示全部楼层   江苏省宿迁市
问题来了 不支持静态编译
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 3 天

发表于 2019-11-27 07:03:32 | 显示全部楼层   上海市上海市
有BUG 不知道修复没修复!数组内的其它类型数据都会被转化为文本型的数据!
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)
发表于 2019-1-15 22:01:57 | 显示全部楼层   四川省成都市
看帖还收取了我的币
回复 支持 反对

使用道具 举报

发表于 2018-9-14 13:34:15 | 显示全部楼层   上海市上海市
赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!赞一个,大神啊!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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