开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 1120|回复: 9
收起左侧

[完成] json 排序问题

 关闭 [复制链接]
结帖率:86% (6/7)
发表于 2021-5-21 20:52:10 | 显示全部楼层 |阅读模式   重庆市重庆市
60精币
json 排序这个易语言资源太少了搞了2天一直没排序成功 哪位大佬能提供一个案例zyJsonValue 自带的排序也不好使啊

sig生成规则(空参数值不参与)
第一步:将请求参数数组按照key的ASCII码字典序升序排序(递归,子数组也要排序)
注意:boolean型的需要转换成0或者1再进行sig的字符串拼接否则会签名不匹配
请求参数举例
  • {"tags":[],"shop_id":"3592793253","sub_balance":"7500","diy_gift_coupon_pay":[],"remark":null,"sub_credit":"0","cno":"1177984","cashier_id":"-1","count_num":null,"gift_coupons_ids":["1585459235115551493"],"activity_ids":[],"biz_id":"7177798788424091240","deno_coupon_ids":["1585300479841897178"],"payment_mode":"1","payment_amount":"0","products":[{"tags":[],"num":"1","price":"4800","no":"9003","name":"荷花乌鱼片","is_activity":"2"}],"consume_amount":"17300","credit_amount":null}

排序并urlencode后结果
  • biz_id=7177798788424091240&cashier_id=-1&cno=1177984&consume_amount=17300&deno_coupon_ids%5B0%5D=1585300479841897178&gift_coupons_ids%5B0%5D=1585459235115551493&payment_amount=0&payment_mode=1&products%5B0%5D%5Bis_activity%5D=2&products%5B0%5D%5Bname%5D=%E8%8D%B7%E8%8A%B1%E4%B9%8C%E9%B1%BC%E7%89%87&products%5B0%5D%5Bno%5D=9003&products%5B0%5D%5Bnum%5D=1&products%5B0%5D%5Bprice%5D=4800&shop_id=3592793253&sub_balance=7500&sub_credit=0

最佳答案

查看完整内容

[e=2].版本 2 .子程序 字典序排列, 文本型 .参数 formStr, 文本型 .局部变量 name, 文本型, , "0" .局部变量 i, 整数型 .局部变量 j, 整数型 .局部变量 temp, 文本型 .局部变量 form, 文本型 name = 分割文本 (formStr, “&”, ) .计次循环首 (取数组成员数 (name), i) .变量循环首 (i + 1, 取数组成员数 (name), 1, j) .如果真 (name > name [j]) temp = name name = name [j] ...
结帖率:93% (126/136)

签到天数: 6 天

发表于 2021-5-21 20:52:11 | 显示全部楼层   广东省云浮市
  
子程序名返回值类型公开备 注
字典序排列文本型 
参数名类 型参考可空数组备 注
formStr文本型
变量名类 型静态数组备 注
name文本型0
i整数型 
j整数型 
temp文本型 
form文本型 
name = 分割文本 (formStr, “&”, )
计次循环首 (取数组成员数 (name), i)
变量循环首 (i + 1, 取数组成员数 (name), 1, j)
如果真 (name [i] > name [j])
temp = name [i]
name [i] = name [j]
name [j] = temp

变量循环尾 ()
form = form + name [i]
如果真 (取数组成员数 (name) ≠ i)
form = form + “&”

计次循环尾 ()
' 调试输出 (form)
返回 (form)



补充内容 (2021-5-22 13:16):
首先你取出需要的参数,然后转化成拼接的字符串。估计你卡在字符串排序问题了。很多app都用这个方式排序然后sign。这个序列方式叫字典序。
回复

使用道具 举报

结帖率:86% (6/7)
 楼主| 发表于 2021-5-22 01:06:08 | 显示全部楼层   重庆市重庆市
有大佬能解决这个json 排序吗

请求参数举例
{"tags":[],"shop_id":"3592793253","sub_balance":"7500","diy_gift_coupon_pay":[],"remark":null,"sub_credit":"0","cno":"1177984","cashier_id":"-1","count_num":null,"gift_coupons_ids":["1585459235115551493"],"activity_ids":[],"biz_id":"7177798788424091240","deno_coupon_ids":["1585300479841897178"],"payment_mode":"1","payment_amount":"0","products":[{"tags":[],"num":"1","price":"4800","no":"9003","name":"荷花乌鱼片","is_activity":"2"}],"consume_amount":"17300","credit_amount":null}

排序并urlencode后结果
biz_id=7177798788424091240&cashier_id=-1&cno=1177984&consume_amount=17300&deno_coupon_ids%5B0%5D=1585300479841897178&gift_coupons_ids%5B0%5D=1585459235115551493&payment_amount=0&payment_mode=1&products%5B0%5D%5Bis_activity%5D=2&products%5B0%5D%5Bname%5D=%E8%8D%B7%E8%8A%B1%E4%B9%8C%E9%B1%BC%E7%89%87&products%5B0%5D%5Bno%5D=9003&products%5B0%5D%5Bnum%5D=1&products%5B0%5D%5Bprice%5D=4800&shop_id=3592793253&sub_balance=7500&sub_credit=0
回复

使用道具 举报

结帖率:100% (15/15)
发表于 2021-5-22 08:42:28 | 显示全部楼层   重庆市重庆市
官方有没有给你生成工具,直接看看生成工具里面的js怎么写的
回复

使用道具 举报

结帖率:86% (6/7)
 楼主| 发表于 2021-5-22 12:18:41 | 显示全部楼层   重庆市重庆市
nbluo 发表于 2021-5-22 08:42
官方有没有给你生成工具,直接看看生成工具里面的js怎么写的

就给了一个排序前和排序后的对比 没有什么生成工具
回复

使用道具 举报

结帖率:86% (6/7)
 楼主| 发表于 2021-5-22 13:27:38 | 显示全部楼层   重庆市重庆市
千面萌萌 发表于 2021-5-22 13:13
[e=2].版本 2

.子程序 字典序排列, 文本型

为什么第一步就是 name = 分割文本 (formStr, “&”, )  了?
回复

使用道具 举报

结帖率:86% (6/7)
 楼主| 发表于 2021-5-22 13:28:58 | 显示全部楼层   重庆市重庆市
千面萌萌 发表于 2021-5-22 13:13
[e=2].版本 2

.子程序 字典序排列, 文本型

如果先拼接在一起 那json 子数组也要排序 咋排序

补充内容 (2021-5-22 13:29):
sig生成规则
第一步:将请求参数数组按照key的ASCII码字典序升序排序(递归,子数组也要排序)
注意:boolean型的需要转换成0或者1再进行sig的字符串拼...
回复

使用道具 举报

结帖率:100% (2/2)
发表于 2021-5-22 15:04:35 | 显示全部楼层   河南省开封市
提醒LZ下,计算时只拼接值,不带参数名

补充内容 (2021-5-22 15:10):
7177798788424091240&-1&1177984&17300&1585300479841897178&1585459235115551493&0&1&2&%E8%8D%B7%E8%8A%B1%E4%B9%8C%E9%B1%BC%E7%89%87&9003&1&4800&3592793253&7500&0

补充内容 (2021-5-22 15:11):
再用萌萌发的那个字典排序
回复

使用道具 举报

签到天数: 1 天

发表于 2021-5-22 15:38:36 | 显示全部楼层   浙江省杭州市
不应该是 activity_ids在前面吗?
回复

使用道具 举报

签到天数: 1 天

发表于 2021-5-22 15:39:49 | 显示全部楼层   浙江省杭州市
我这个 对不对

biz_id=7177798788424091240&cashier_id=-1&cno=1177984&consume_amount=17300&deno_coupon_ids%5B0%5D=1585300479841897178&gift_coupons_ids%5B0%5D=1585459235115551493&payment_amount=0&payment_mode=1&products%5B0%5D%5Bnum%5D=1&products%5B0%5D%5Bprice%5D=4800&products%5B0%5D%5Bno%5D=9003&products%5B0%5D%5Bname%5D=%E8%8D%B7%E8%8A%B1%E4%B9%8C%E9%B1%BC%E7%89%87&products%5B0%5D%5Bis_activity%5D=2&shop_id=3592793253&sub_balance=7500&sub_credit=0
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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