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 ...
随机推荐
- mybati内sql查询语句在两个日期内
装载自: http://blog.csdn.net/u010442302/article/details/72902441?locationNum=9&fps=1 <select i ...
- [转帖] JVM虚拟机的历史
Java虚拟机发展史 https://blog.csdn.net/tinyDolphin/article/details/72809018 如何查看自己的虚拟机版本?Sun Classic / Exa ...
- [OS] 内核态和用户态的区别
http://blog.csdn.net/fatsandwich/article/details/2131707# http://jakielong.iteye.com/blog/771663 当一个 ...
- properties文件读取与写入
将peoperties文件的读取和写入封装成了一个工具类: import java.io.BufferedInputStream; import java.io.FileInputStream; im ...
- 最小费用流spfa算法模板(pascal)
以前写过,现在的码风与以前有些变化,主要是用数组模拟邻接表存图,以前是用指针存图. 以前的博文:http://www.cnblogs.com/Currier/p/6387732.html 洛谷可评测. ...
- Nim游戏学习笔记
- JAVA Junit4
JAVA Junit4 测试框架 序言 刚学Java的时候就听说过JUnit了,单元测试框架,很好用的测试框架,JUnit测试 ...
- [洛谷P5081]Tweetuzki 爱取球
题目大意:有$n$个球,每一次取一个球然后放回,问期望多少次取遍所有球 题解:令$f_i$表示已经取了$i$种球,还要取的次数的期望.$f_i=\dfrac in(f_i+1)+\dfrac{n-i} ...
- [UVALive 2678] Subsequence
图片加载可能有点慢,请跳过题面先看题解,谢谢 在切水题的道路上狂奔,一发不可收拾... 这道题好像不用写什么题解吧,吐个槽什么的算了 一眼题,大佬们都不屑于做,只有我这种弱菜才来写这种题目玩儿 记个前 ...
- 安装Xtrabackup,设置定时备份msyql数据库
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. XtraDB 存储引擎是由Perco ...