python3中的字典dict格式会将{"a":"1","b":"2"}的格式自动转换为{'a': ' 1', 'b': '2'}单引号并添加上空格,
到Java或者其他强类型中或者高版本的json下不能识别,
比如在python中将字典转换成功json后传给Java,很有可能在Java中不能识别带空格和单引号的json格式,
那么就需要在python3中把格式转换成标准的json格式,直接上代码示例:
import json
dict1 = {"a":"1",
"b":"2"}
dict2 = {"a":"1",
"姓名":"马云"}
# 直接转换
json1 = json.dumps(dict1)
json1_1 = json.dumps(dict2)
# 严格格式转换
json2 = json.dumps(dict1, separators=(',', ':'), ensure_ascii=False)
json2_1 = json.dumps(dict2, separators=(',', ':'), ensure_ascii=False)
# 如编码格式不能通过请求参数传递,则转换下编码格式
json3 = json.dumps(dict2, separators=(',', ':'), ensure_ascii=False).encode('utf-8').decode('latin1')
print("直接转换dict1", json1)
print("直接转换dict2", json1_1)
print("严格格式转换dict1", json2)
print("严格格式转换dict2", json2_1)
print("严格格式编码转换dict2", json3)
json.dumps 参数解释:
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示
indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是 (‘,’,’:’) 这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
encoding:默认是UTF-8,设置json数据的编码方式。
sort_keys:将数据根据keys的值进行排序。