python json转字符串_Python json转字符串的一些细节

要调PHP那边的接口,php那边一直都校验不过,很是郁闷。没办法,只能让人把发送成功的代码拿过来看,不过是php写的,步骤都是一样:

php端:

1. json对象转json字符串.

2. 对json字符串base64.

3. 加入一些其他变量与2得到的base64进行md5

php运行成功,但python一直都不过,把php的变量都打印了出来,前后对比了很多次,发现,有两个不同的地方:

1. python里json转字符串,默认的是有indent,即多一个空格的。这点跟php里的json_encode()方法不同,php里没有空格。

2. python如果用dict,转成字符串无法保证字符串顺序,这点导致得到的base64跟php的不同。

就是这两点,才导致python调用接口一直验证不过。

解决:

对于1. 查看json模块的dumps方法源码,发现有个separators参数,设置为 (',', ':') 即可。

对于2. 使用collection模块里的OrderedDict类,可以保证字符串顺序

代码片段:

from collections importOrderedDict#这里要保护json转字符串顺序,不然php那边校验不过

inner =OrderedDict(

[("tab", OrderedDict([("type", "exp"), ("value", 1)]))]

)

code=OrderedDict(

[("user", 23445),

("api", 2364),

("guid", '3f60614f-315d-11e7-b690-f8bc127f78d8'),

("cmds",inner)]

)#这里就是顺序的字符串

json.dumps(code, encoding="UTF-8", separators=(',', ':'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值