python的json用法

一、json是什么

  客户端向服务器端发送请求后,服务器端怎么才能把用户需要的数据返回给客户端呢。这时我们就需要用一个指定的格式将数据,按照指定格式返回客户端。这时就有了两种数据传输的方式(XMLJson

  常用的是Json,因为在普通的Web应用中,不管是服务器端还是客户端解析XML代码会非常麻烦,所以这时Json就更加满足数据传输解析的要求。采用Json格式的方式进行数据的传输,不仅方便传输解析,还特别易于人阅读和编写。

打个形象的比方,后端好比是厨师,厨师做好菜,盛到盘子(json)中,交给顾客(前段)。盘子在这个过程中起到了一个交换的容器的作用。

  导入:

import  json
print(json.__all__)

  主要方法:

['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder']

 

二.XML与Json转换:

1.常规转换:

<emp>
    <name>fxhl</name>
    <city>深圳</city>
    <age>23</age>
</emp>

转换为Json为:

  {“name”:“fxhl”,"city":"深圳","age":23}

三、json和python中字典的区别和联系

刚开始学习json时感觉和python中的字典很像,两者还是有不小的区别的。

字典:{‘username’:‘wmh’,‘score’:[10,20,30],'a':999}

可以增删改查,单双都可以,是一种数据类型,有内置方法。

json:{

    "studentInfo":
    {
        "id":123456,
        "stu_name":"Dorra"
    }
}

 

必须使用双引号或值得边界符号,不能使用单引号是一种数据格式,较少的操作方式,多用于数据传输和存储。

它们的共同点:都是key和values形式

四、python中json序列化和反序列化

  在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,

反序列化可以理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。

  json的dumps方法和loads方法,可实现数据的序列化和反序列化。具体来说, dumps方法,可将json格式数据序列为Python的相关的数据类型; loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求。在序列化时,中文汉字总是被转换为unicode码,在dumps函数中添加参数ensure_ascii=False即可解决。

序列化

1 #coding: utf-8
 2 import json
 3 
 4 dict = {'name':'wmh', 'age':18, 'hobby':'听音乐'}
 5 print('未序列化前的数据类型为:', type(dict))
 6 print('为序列化前的数据:', dict)
 7 #对dict进行序列化的处理
 8 dict_xu = json.dumps(dict,ensure_ascii=False)    #添加ensure_ascii=False进行序列化
 9 print('序列化后的数据类型为:', type(dict_xu))
10 print('序列化后的数据为:', dict_xu)
11 -------------------------------------------------------------------
12 未序列化前的数据类型为: <class 'dict'>
13 为序列化前的数据: {'hobby': '听音乐', 'age': 18, 'name': 'wmh'}
14 序列化后的数据类型为: <class 'str'>
15 序列化后的数据为: {"hobby": "听音乐", "age": 18, "name": "wmh"}

反序列化

import  json

dict1={'name':'雷子','age':24,'address':'北京'}

print (u'未序列化前的数据类型为:',type(dict1))
print (u'未序列化前的数据:',dict1)
#对dict1进行序列化的处理
str1=json.dumps(dict1)
print (u'序列化后的数据类型为:',type(str1))
print (u'序列化后的数据为:',str1)
#对str1进行反序列化
dict2=json.loads(str1)
print (u'反序列化后的数据类型:',type(dict2))
print (u'反序列化后的数据:',dict2)

输出:

未序列化前的数据类型为: <class 'dict'>

未序列化前的数据: {'age': 24, 'name': '雷子', 'address': '北京'}

序列化后的数据类型为: <class 'str'>

序列化后的数据为: {"age": 24, "name": "\u96f7\u5b50", "address": "\u5317\u4eac"}

反序列化后的数据类型: <class 'dict'>

反序列化后的数据: {'age': 24, 'name': '雷子', 'address': '北京'}

结合requests库,来看返回的json数据,具体代码为:

posted @ 2019-04-27 16:00  胖虎本胖  阅读(619)  评论(0编辑  收藏  举报