文章目录

      • 序列化就是将python中的字典转换为一种特殊的字符串(json)
      • 那么反序列化就是,将json字符串转换为python字典
      • 想输出真正的中文需要指定ensure_ascii=False,,还可以使用排序sort_keys,缩进:indent
    • 1.json.dumps()用于将dict类型的数据转成str
    • 2. 、json.dump()用于将dict类型的数据转成str,并写入到json文件中。
    • 3. json.loads()用于将str类型的数据转成dict。
    • 4. json.load()用于从json文件中读取数据。
  • pickle库
  • 可以使用 demjson库,此库的强大,
  • jmespath ,此工具内置,可直接使用
序列化就是将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()    # 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会转换成unicodeprint(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,jsObj.get(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对象
demjson.encode(obj, encoding='utf-8') #把对象转换成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 jmespathdic_1 = {"a": "foo", "b": "bar", "c": "baz"}
path = jmespath.search("a", dic_1)
print(path)```
![在这里插入图片描述](https://img-blog.csdnimg.cn/775b6b27631e4d8bb1866137bd768a1a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZmVpeXUzNjE=,size_20,color_FFFFFF,t_70,g_se,x_16)

python之json序列化与反序列化相关推荐

  1. python 3 json 序列化

    python 3 json 序列化 我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特 ...

  2. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  3. JSON序列化和反序列化还有这种玩法

    Mixin对于前端开发者可不陌生,Vue.React等知名前端框架都使用了Mixin.而对于后端开发,尤其是Java后端开发来说Mixin却是一个很陌生的概念.今天来我们通过Jackson让后端开发者 ...

  4. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境-- 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  5. json 反序列化 父子类型_Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo...

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

  6. Go进阶(7): JSON 序列化和反序列化

    1. json序列化和反序列化基础 json数据的序列化和反序列化是一种非常常见的方式,尤其是在http/rcp的微服务调试中. 基础语法 在 Go 中我们主要使用官方的 encoding/json  ...

  7. 序列化对象C++对象的JSON序列化与反序列化探索

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...

  8. php和js序列化,PHP中serialize和json序列化与反序列化的区别

    在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: PHP 1 2 3 4$web=newstdClass; $web-> ...

  9. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

最新文章

  1. (C++)1041 考试座位号
  2. 第一篇,试试功能如何
  3. 使用 QEMU 进行系统仿真
  4. 中科院罗平演讲全文:自动撰写金融文档如何实现,用 AI 解救“金融民工” | CCF-GAIR 2017
  5. SpringBoot高级-检索-Elasticsearch简介安装
  6. 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
  7. Catalan数总结
  8. php解析视频_原创更新:快手短视频无水印直连解析下载PHP前端版
  9. Google Earth Engine APPS(GEE)——使用 AREA2 和 CODED 估算森林砍伐和退化面积(第 1 部分:运行 CODED)
  10. python怎么把二维数组转化一维数组,python 二维数组转一维数组
  11. 3D打印成型技术:看得见摸得着的真实
  12. 前端技术 | dva,美貌与智慧并存
  13. 小程序商城制作一个需要多少钱?
  14. 【软考】【系统架构设计师】2021上午真题及答案
  15. IEEE-754例题
  16. 青云服务器控制台系统,青云QingCloud控制台小程序上线
  17. 值得看三次的高干文_值得看三次的高干文12部
  18. 如何“管理”自己的上级
  19. 使用RStudio导出高清符合要求的SCI图片
  20. 全球名校AI课程库(3)| Stanford斯坦福 · 深度学习与计算机视觉课程『CS231n』

热门文章

  1. 萌宠大作战服务器维护,萌宠大作战开服表
  2. 如何实现大文件上传:秒传、断点续传、分片上传
  3. 怎样成为一名专业的程序员
  4. PM架构师之路《重新出发》
  5. 微信小程序 分享图片大小处理
  6. 听说Zynq - 手把手教你建立第一个工程
  7. ovirt 主机忘记密码修改
  8. Dapr 知多少 | 分布式应用运行时
  9. js正则只允许输入数字和字母
  10. mysql8 新特性总结