python之json序列化与反序列化⽂章⽬录
序列化就是将python中的字典转换为⼀种特殊的字符串(json)
那么反序列化就是,将json字符串转换为python字典
想输出真正的中⽂需要指定ensure_ascii=False,还可以使⽤排序sort_keys,缩进:indent
print(json.dumps({'a':'str','c': True,'e':10,'b':11.1,'d': None,'f':[1,2,3],'g':(4,5,6)}, sort_keys=True, indent=4)) json.dumps('中国',ensure_ascii=False)
>>> import json
>>> sstr = json.dumps("你好")
>>>print(sstr)
"\u4f60\u597d"
>>> ustr = json.dumps("你好", ensure_ascii=False)
>>>print(ustr)
"你好"
1.json.dumps()⽤于将dict类型的数据转成str
import json
name_emb ={'a':'1111','b':'2222','c':'3333','d':'4444'}
jsObj = json.dumps(name_emb)
print(name_emb)
print(jsObj)
print(type(name_emb))
print(type(jsObj))
------------------------------------------------------------------------
{'a':'1111','c':'3333','b':'2222','d':'4444'} {"a":"1111","c":"3333","b":"2222","d":"4444"}
<type 'dict'>
<type 'str'>
2. 、json.dump()⽤于将dict类型的数据转成str,并写⼊到json⽂件中。
import json
name_emb ={'a':'1111','b':'2222','c':'3333','d':'4444'}
emb_filename =('/home/cqh/faceData/emb_json.json')
# solution 1
jsObj = json.dumps(name_emb)
with open(emb_filename,"w") as f:
f.write(jsObj)
f.close()
import pickle
# solution 2
json.dump(name_emb,open(emb_filename,"w"))
3. json.loads()⽤于将str类型的数据转成dict。import json
name_emb ={'a':'1111','b':'2222','c':'3333','d':'4444'}
jsDumps = json.dumps(name_emb)
jsLoads = json.loads(jsDumps)
print(name_emb)
print(jsDumps)
print(jsLoads)  #'a'变成了u'a'是因为发⽣了类型转换,str会转换成unicode
print(type(name_emb))
print(type(jsDumps))
print(type(jsLoads))
-----------------------------
{'a':'1111','c':'3333','b':'2222','d':'4444'} {"a":"1111","c":"3333","b":"2222","d":"4444"}
{u'a': u'1111', u'c': u'3333', u'b': u'2222', u'd': u'4444'}
<type 'dict'>
<type 'str'>
<type 'dict'>
4. json.load()⽤于从json⽂件中读取数据。
import json
emb_filename =('/home/cqh/faceData/emb_json.json')
jsObj = json.load(open(emb_filename))
print(jsObj)
print(type(jsObj))
for key in jsObj.keys():
print('key: %s  value: %s'%((key)))
直接上代码
import json
# 序列化反序列化
# 将字典对象转换为json
# 序列化将 Python对象转换成 json字符串
dic ={
'is_login': True,
'username':'枫枫',
}
print(json.dumps(dic))  # {"is_login": true,"username":"\u67ab\u67ab"} # 反序列化将 json 字符串转换成 python 对象
json_str ='{"is_login": true, "username": "\u67ab\u67ab"}'
print(json.loads(json_str))  # {'is_login': True,'username':'枫枫'}
# 序列化
a ="枫枫"
print(json.dumps(a,ensure_ascii=False))  # "\u67ab\u67ab"
# 反序列化
s ='"\u67ab\u67ab"'
print(json.loads(s))  # 枫枫
pickle库
dumps对象序列化为bytes对象
dump对象序列化到⽂件对象,就是存⼊到⽂件。
loads从bytes对象反序列化。
load对象反序列化,从⽂件读取数据.
pickle的接⼝跟json是⼀样的,序列化⽤dumps(x), dump(x, f),反序列化使⽤loads(s), load(f)。但是,pickle可以序列化任意复杂的对象,⽐如⾃定义的类、函数都是可以⽤它来序列化的。⽐如下⾯这个例⼦就是序列化b并反序列化⼀个函数:
obj =123,"abcdedf",["ac",123],{"key":"value","key1":"value1"}
obj1 = pickle.dumps(obj)
print type(obj1)# 输出:<type 'str'>
obj2 = pickle.loads(obj1)
print type(obj2)# 输出:<type 'tuple'>
可以使⽤ demjson库,此库的强⼤,
安装⽅法:
pip install demjson
两个最常⽤的直接⽤法
demjson.decode(string,encoding='utf-8') #把json字符串变json对象
json的字典也必须是加上双引号,要不然⽤json.loads报错,但是⽤这个 ⽶有任何问题
# 这⾥ status是没有加""号的,⽤普通的转换会报错,这时⽤这个库就完美
string ='''{string = '''{status:"error",
"messages":["Could not find resource or operation 'BZK1.MapServer' on the system."],
"code":404}'''
# print(type(string))
# print(json.loads(string))# 将字符串转换成dict
resp_body = demjson.decode(string)
print(resp_body):"error",
"messages":["Could not find resource or operation 'BZK1.MapServer' on the system."],
"code":404}'''
# print(type(string))
# print(json.loads(string))# 将字符串转换成dict
resp_body = demjson.decode(string)
print(resp_body)
jmespath ,此⼯具内置,可直接使⽤
import jmespath
dic_1 ={"a":"foo","b":"bar","c":"baz"}
path = jmespath.search("a", dic_1)
print(path)
```
![在这⾥插⼊图⽚描述](img-blog.csdnimg/775b6b27631e4d8bb1866137bd768a1a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ, shadow_50,text_Q1NETiBAZmVpeXUzNjE=,size_20,color_FFFFFF,t_70,g_se,x_16)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。