一、json
JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法
1、json轻量级:语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
(1)数据在名称/值对中
(2)数据由逗号分隔
(3)一个花括号表示一个对象
(4)[]数组,可以存放多个对象
(5)字符串使用双引号
 
二、Python类型与json类型转换
1、把python的数据,转换为json格式
json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),skipkeys=True,ensure_ascII=False)
sort_keys默认是false。是否按字典排序(a到z)输出:True(按字典排序)
indent:每个value对前面空4格显示
separators:使用制定的字符替换,参数的作用是去掉逗号“,”和分号“:”后面的空格
skipkeys:把有错误的数据忽略掉
ensure_ascii:默认是True:字符之外的显示为\u4e2d\u56fd
 
2、json解码:把json格式,转换成为python格式
json.loads()
json的object类型-----Python的dict类型
json的array类型------Python的list类型
 
import json
data = [{'a':'A','b':(2,4),'c':3.0,'d':None,'e':True}]
print data
dataJson = json.dumps(data,sort_keys=True,separators=(',',':'),indent=4,skipkeys=True)
print dataJson
 
print json.loads(dataJson)
 
3、编码过程中,Python中的list和tuple都被转化成json的数组,而解码后,json的数组最终被转化成Python的list的,无论是原来是list还是tuple。
 
三、序列化和反序列化
1、把python的类对象转换为json格式:使用dumps()函数中的default参数
import json
class Employee(object):
def __init__(self,name,age,sex,tel):
self.name = name
self.age = age
self.sex = sex
self.tel = tel
# 将序列化函数定义到类里面
def objJson(self):
return {
'name':self.name,
'age':self.age,
'sex':self.sex,
'tel':self.tel
}
 
e1 = Employee('andy','24','male','131xxxxxxxx')
print json.dumps(e1,default=e1.objJson)
 
#另一个更简单的方法
e1=Employee('andy','24','male','131xxxxxxxx')
# print json.dumps(e1,default=e1.objJson)
print json.dumps(e1.__dict__)
通常class及其实例都会有一个__dict__属性(除非类中添加了__slots__属性),它是一个dict类型,
存储的是类或类实例中有效的属性。
 
2、Json反序列化为类对象
json串反序列化成类对象或类的实例,使用的是loads()方法中的object_hook参数来实现。
json.loads(data,object_hook=jsonToClass)
 
class Employee(object):
def __init__(self,name,age,sex,tel):
self.name = name
self.age = age
self.sex = sex
self.tel = tel
def objJson(self,obj_instance):
return {
'name':obj_instance.name,
'age':obj_instance.age,
'sex':obj_instance.sex,
'tel':obj_instance.tel
}
 
e1 = Employee('andy','24','male','131xxxxxxxx')
print json.dumps(e1.__dict__)
#fucn(e1)
print e1.__dict__
 
def jsonToClass(dictVar):
return Employee(dictVar['name'],dictVar['age'],dictVar['sex'],dictVar['tel'])
jsonDate = {"age": "24", "tel": "131xxxxxxxx", "name": "andy", "sex": "male"}
e = json.loads(jsonDate,object_hook=jsonToClass)
print e
print e.name
 
四、
Python类型                 JSON字符串类型
dict                             object
list, tuple                    array
str, unicode               string
int, long, float            number
True                          true
False                        false
None                        null

Python之json编码的更多相关文章

  1. Python 语言来编码和解码 JSON 对象

    Json函数: json.dumps: Python标准库中的json模块,集成了将数据序列化处理的功能. 将 Python 对象编码成 JSON 字符串 语法: json.dumps(obj, sk ...

  2. Json概述以及python对json的相关操作

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

  3. 使用Python解析JSON数据的基本方法

    这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下:     ----------------------------------- ...

  4. python 序列化 json pickle

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  5. Json概述以及python对json的相关操作(转)

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  6. python的json模块

    Python JSON 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. 环境配置 在使用 Python 编码或解码 JSON 数据前,我们需要先安装 JSON 模块. ...

  7. python解析json

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 引用 import json 编码:把一个Python对象编码转换成Json字符串 json.dumps ...

  8. python 解析json loads dumps

    认识 引用模块 重要函数 案例 排序 缩进参数 压缩 参考 认识 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standa ...

  9. python 操作json

    认识 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - Dece ...

随机推荐

  1. Myeclipse报错-Java compiler level does not match 完美解决方法

    从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description  Resource Path Location Type Java compiler level d ...

  2. laravel5.5jwt-auth的使用

    laravel5.5 + jwt-auth:dev-develop 安装扩展 composer require tymon/jwt-auth:dev-develop --prefer-source 添 ...

  3. windows系统下npm升级的正确姿势以及原理

    本文来自网易云社区 作者:陈观喜 网上关于npm升级很多方法多种多样,但是在windows系统下不是每种方法都会正确升级.其中在windows系统下主要的升级方法有以下三种: 首先最暴力的方法删掉no ...

  4. static和final的区别(转载)

    Java中static 和final的区别 final定义的变量可以看做一个常量,不能被改变: final定义的方法不能被覆盖: final定义的类不能被继承. final static 就是再加上s ...

  5. C++调用Asprise OCR识别图片

    在一个识别软件中发现了Asprise OCR的"身影",上官网查了一下相关信息,发现功能挺强大的,识别印刷体应该不错,遗憾的是好像不能识别中文,不过不知道它对扭曲后的英文识别能力怎 ...

  6. Git 上传本地仓库到码云

    一.将本地的项目上传到码云 1.码云上创建一个项目 testgit (名字随你) 2.本地创建一个文件夹D:/testgit,然后使用git bash 3.cd 到本地文件夹中D:/testgit 4 ...

  7. 面向对象 公有私有 property classmethod staticmethod

    接口类(抽象类)--------就是一种规范 面向对象的私有与公有 对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的访问限制不 ...

  8. python 基础篇 04(列表 元组 常规操作)

    本节主要内容:1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range 一. 列表1.1 列表的介绍列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. ...

  9. BZOJ 4031 HEOI2015 小Z的房间 基尔霍夫矩阵+行列式+高斯消元 (附带行列式小结)

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可 ...

  10. jquery用正则表达式验证密码强度

    /**         * 不加paste鼠标粘贴不起作用         * 不加input第一次粘贴的时候不变         * 加上input和focus可以兼容表情         * ke ...