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 import OrderedDict # 这里要保护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=(',', ':'))
Python json转字符串的一些细节的更多相关文章
- python json解析字符串出错该如何排查问题
每天写一点,总有一天我这条咸鱼能变得更咸 python中对于字符串转json格式有专门的json库可以操作 #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- python json格式字符串转换为字典格式
不废话,看代码 #_*_ coding:utf- _*_ import os import json course=open('C:\\Users\\ly199\\Desktop\\list.txt' ...
- python,json解析字符串时ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
今天写测试工具的时候,去excel取数据,用json解析字符串为字典时报错,后经调试,发现是单引号的原因,将单引号换位双引号即可 def getExcelValue_to_dic(filepath): ...
- Python 标准库 urllib2 的使用细节
刚好用到,这篇文章写得不错,转过来收藏. 转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...
- python JSON处理
概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等. 反序列化:就是从存储区域(JSON,XML)读取反序列化对象的 ...
- python json基础学习01
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import json #全称(javascript object ...
- Python json & pickle, shelve 模块
json 用于字符串和python的数据类型间的转换 四个功能 dumps dump loads load pickle 用于python特有的类型和python的数据类型进行转换 四个功能 dump ...
- Python json序列化
Python内置的json模块提供了非常完善的对象到JSON格式的转换.废话不多说,我们先看看如何把Python对象变成一个JSON: d = dict(name='Kaven', age=17, s ...
- Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助
Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助 目录 Pychar ...
随机推荐
- 软工网络15团队作业8——Beta阶段项目总结
1.新成员 姓名 风格 擅长 角色 宣言 李家俊 乱写 都有所涉猎 测试 混就完事了 丁树乐 潇洒 与人沟通 测试 与其临渊羡鱼,不如退而结网 2.是否需要更换团队的PM 不需要 3.下一阶段需要改进 ...
- 使用JavascriptExecutor改变页面元素
如下如html的页面代码 <html> <body> <input type="text" name="text" value=& ...
- ESXi服务器遇到 IPMI_SI_DRV 的解决, 感谢原作者 以及今天 解决问题.
ESXI 服务器断电之后一直 LOADING MODULE IPMI_SI_DRV 的解决办法 今日家中忽然断电,之后 ESXi 服务器就一直疯狂转,连接显示器,发现原来一直没有启动.停留在ESXi ...
- mysql索引的优化
MySQL索引的优化 上面都在说使用索引的好处,但过多的使用索引将会造成滥用.因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT.UPDATE和DEL ...
- Shopping Bands Rank & SBR
Shopping Bands Rank SBR https://www.guiderank.org/index.html Nike Air Zoom Pegasus 34 http://www.shi ...
- mybatis的mapper参数传递
简单参数传递 简单参数传递是指: 传递单个基本类型参数,数字类型.String 传递多个基本类型参数 parameterType 属性可以省略: 传递单个基本类型参数 SQL语句中参数的引用名称并不 ...
- iOS 数据库sqlite完整增删改查操作
1: 创建数据库表格 1.1 — 表格创建使用一个数据库软件快速创建:软件大小14.3M; 下载地址:http://pan.baidu.com/s/1qWOgGoc; 表格创建-> 打开软件,点 ...
- mysql的check约束问题
mysql手册中写道:存储引擎会解析check子句,但是会把它忽略掉 The CHECK clause is parsed but ignored by all storage engines. 现在 ...
- 【刷题】BZOJ 2594 [Wc2006]水管局长数据加强版
Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...
- BZOJ 3787: Gty的文艺妹子序列
3787: Gty的文艺妹子序列 Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 186 Solved: 58[Submit][Status][Dis ...