• 每次打开一个文件,只dump1次
  • json.dump(dump的内容,文件句柄)
  • json.load(文件句柄)
  • json可以处理列表/字典/字符串等简单数据类型,但是不能处理复杂的数据类型,如函数的内存地址
  • 不同语言间都可以用json文件
import json
dict1={'name':'alex','age':22,'salary':1000}
print('dict is %s\ndumping dict to file...' % (dict1))
fd = open('fd.txt','w',encoding='utf-8')
# with open('fd.txt','w',encoding='utf-8') as fd:
# json.dump(dict1,fd)
dict2={'name':'oldboy','age':32,'salary':2000}
# with open('fd.txt','w',encoding='utf-8') as fd:
# json.dump(dict2,fd)
json.dump(dict1,fd)
fd.close()
# json.dump(dict2,fd)
fd = open('fd.txt','r',encoding='utf-8')
print('load content from file...')
print(json.load(fd))
fd.close()
output:
dict is {'age': 22, 'salary': 1000, 'name': 'alex'}
dumping dict to file...
load content from file...
{'age': 22, 'salary': 1000, 'name': 'alex'}
dumping dict to file...
import json
dict1={}
def func():
print('in the func')
dict1['name']=func
fd = open('fdw.txt','w',encoding='utf-8')
print('dumping dict to file...' % (dict1))
json.dumps(dict1,fd)
fd.close()
error:
TypeError: <function func at 0x7f0828c68488> is not JSON serializable
  • pickle能处理python所有的数据类型
import pickle
dict1={}
def func():
print('in the func')
dict1['name']=func
fd = open('fdw.txt','wb')
print('dumping dict to file... %s' % (dict1))
pickle.dump(dict1,fd)
fd.close()
fd = open('fdw.txt','rb')
print(pickle.load(fd))
fd.close()
output:
dumping dict to file... {'name': <function func at 0x7fa1904d4488>}
{'name': <function func at 0x7fa1904d4488>}

dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
Serialize ``obj`` to a JSON formatted ``str``.

  • 将一个对象转换成json格式的字符串

loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
containing a JSON document) to a Python object.

  • 将一个json格式的对象反序列成python对象
import json
l1 = ["alex", 123, "eric"]
l2 = ["alex", 123, 'eric']
s1 = """ ["alex", 123, "eric"] """
s2 = """ ["alex", 123, 'eric'] """
print(json.dumps(l1),type(json.dumps(l1))) # list to str
print(json.dumps(l2),type(json.dumps(l2))) # list to str
print(json.dumps(s1),type(json.dumps(s1))) # still str
print(json.dumps(s2),type(json.dumps(s2))) # still str # 四个正确
# print(json.loads(l1)) # json格式需要字符串,这是列表
# print(json.loads(l2)) # 同上
print(json.loads(s1),type(json.loads(s1))) # str to list,json格式需要双引号
# print(json.loads(s2)) # 格式错误,有单引号 dict1={}
dict1["name"]="xxx"
print(json.dumps(dict1),type(json.dumps(dict1)))
# str1='''dict1["name"]="xxx"'''
# print(json.loads(str)) l = ['iplaypython', [1, 2, 3], {'name':'xiaoming'}]
encoded_json = json.dumps(l)
print(encoded_json,type(encoded_json))
decode_json = json.loads(encoded_json)
print(decode_json,type(decode_json)) 输出

["alex", 123, "eric"] <class 'str'>
["alex", 123, "eric"] <class 'str'>
" [\"alex\", 123, \"eric\"] " <class 'str'>
" [\"alex\", 123, 'eric'] " <class 'str'>
['alex', 123, 'eric'] <class 'list'>
{"name": "xxx"} <class 'str'>
["iplaypython", [1, 2, 3], {"name": "xiaoming"}] <class 'str'>
['iplaypython', [1, 2, 3], {'name': 'xiaoming'}] <class 'list'>

python3.x 基础四:json与pickple的更多相关文章

  1. python3.x 基础四:目录获取及目录规范

    1.获取目录 import os,sys print('程序文件运行相对位置>>',os.path.abspath(__file__)) print('程序文件上级绝对目录>> ...

  2. python3.x 基础四:生成器与迭代器

    1.预先存值到内存,调用之前已经占用了内存,不管用与不用,都占用内存 >>> a=[1,2,3,4,5] >>> type(a) <class 'list'& ...

  3. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  4. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  5. Bootstrap<基础四> 代码

    Bootstrap 允许您以两种方式显示代码: 第一种是 <code> 标签.如果您想要内联显示代码,那么您应该使用 <code> 标签. 第二种是 <pre> 标 ...

  6. 从零开始学习PYTHON3讲义(四)让程序更友好

    <从零开始PYTHON3>第四讲 先看看上一讲的练习答案. 程序完成的是功能,功能来自于"程序需求"("需求"这个词忘记了什么意思的去复习一下第二讲 ...

  7. C#_02.13_基础四_.NET方法

    C#_02.13_基础四_.NET方法 一.方法概述: 方法是一块具有名称的代码.可以通过方法进行调用而在别的地方执行,也可以把数据传入方法并接受数据输出. 二.方法的结构: 方法头  AND  方法 ...

  8. Java基础-处理json字符串解析案例

    Java基础-处理json字符串解析案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible ...

  9. python3字典:获取json响应值来进行断言的用法详解

    在Python中我们做接口经常用到一些json的返回值我们常把他转化为字典,在前面的python数据类型详解(全面)中已经谈到对字典的的一些操作,今天我们就获取json返回值之后,然后转化为字典后的获 ...

随机推荐

  1. jenkins及Maven介绍

    一.环境介绍 随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.Jenkins自动化部署可以解决集成.测试.部署等重复性的 ...

  2. Linux运维基础阶段部分复习概要

    [jj@oldboy ~]$ hostnamectl set-hostname zj 主机名只有root用户才有权限修改,普通用户想要修改要知道root密码,sudo提权,重启虚拟机或者打开新的窗口新 ...

  3. Vue.js中scoped引发的CSS作用域探讨

    前言 在Vue.js的组件化开发中,常常会对某个组件的style标签加上scoped属性,如<style lang='less' scoped>,这样做的目的在于使这个组件的样式不能轻易在 ...

  4. Windows 10配置VS Code C++环境(超详细,面向小白以及大佬们)

    看完这个,还有下一篇:门在这 我看了网上的大佬们配的我是在是看不懂啊?我是一个小白啊?这太难了,这阻挡不了我,想使用这很骚的IDE,于是在不断的摸索下,终于配置成功,小白们也不用慌,这次非常简单.一定 ...

  5. P1465 序言页码 Preface Numbering (手推)

    题目描述 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,以下是标准数字表: I 1 V 5 X 10 L 50 C 100 D 500 M 1000 最多3个同样的可以表示为 ...

  6. 疯子的算法总结(六) 复杂排序算法 ① 归并排序 merge_sort()

    归并排序采取了分治的思想,每次分别排左半边和右半边,不断递归调用自己,直到只有一个元素递归结束,开始回溯,调用merge函数,合并两个有序序列,再合并的时候每次给末尾追上一个最大int这样就不怕最后一 ...

  7. Jmeter 插件图表分析

    1.jp@gc - Actiive Threads Over Time:不同时间的活动用户数量展示(图表) 当前的时间间隔是1毫秒,在 setting 中可以设置时间间隔以及其他的参数,右击可以导出 ...

  8. 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件

    主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...

  9. Java的类锁、对象锁和方法锁

    在Java中,对于synchronized关键字,大家看到的第一反应就是这个关键字是进行同步操作的,即得名"同步锁". 当用它来修饰方法和代码块时,默认当前的对象为锁的对象,即对象 ...

  10. 《Docker从入门到跑路》之简介

    什么是Docker Docker,中文翻译是"码头工人".根据官方的定义,Docker是以Docker容器为资源分割和调度的基本单元,封装了整个软件运行的环境,为开发者和系统管理员 ...