一、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. mongodb的学习之旅一

    描述 作为一枚菜鸟级别的coder,刚接触nodejs没有多久.现在在学习微信公众号的开发,但是碰到了mongodb保存用户数据的时候,出现了DeprecationWarning: Mongoose: ...

  2. shell重温---基础篇(输入/输出重定向)

        大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准 ...

  3. 1826: [JSOI2010]缓存交换

    1826: [JSOI2010]缓存交换 https://www.lydsy.com/JudgeOnline/problem.php?id=1826 分析: 简单的贪心,然后调啊调...最近怎么了,码 ...

  4. 命令行下对apk签名

    l创建key,需要用到keytool.exe (位于jdk安装目录\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk安装目录\bin目录下),把上两个软件所 ...

  5. 【廖雪峰老师python教程】——filter/sorted

    filter Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然 ...

  6. Django admin源码剖析

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  7. jmeter如何连接数据库

    大家都知道jmeter是java编写的,java/jmeter如果想连接数据库就要通过java database connector(JDBC)去连接,首先需先下载一个驱动 (mysql-connec ...

  8. C++的几种字符类型

    我们在C学过了char字符类型. 在C++中,char是基本的字符类型,但却不仅仅有这一种字符类型! 类型 含义 该类型数据所占的最小比特位数 char 字符 8位(即可表示28个字符) wchar_ ...

  9. chromium源码阅读--V8 Embbeding

    V8是google提供高性能JavaScript解释器,嵌入在chromium里执行JavaScript代码. V8本身是C++实现的,所有嵌入本身毫无压力,一起编译即可,不过作为一个动态语言解释器, ...

  10. .Net com组件操作excel(不建议采用Com组件操作excel)

    添加"Microsoft Office 12.0 Object Library" com组件 1 using System; using System.Data; using Sy ...