Python_json的简单说明

Json的简单说明

1、json的简介

网络传输的本质,服务器a——服务器b(本身是以字节传输的)

Soap:简单对象传输协议

#coding=utf-8
import json
data = [{'a':"A",'b':(2,4),'c':3.0}]
res = repr(data)
print("data :", res)
data_json = json.dumps(data)
print(data_json) 

如下的转化是不可逆的

2Pythonjson的数据类型的区别

#coding=utf-8
import json

a = [{1:12,"a":12.3}, [1,2,3],(1,2), "asd", "ad", 12,13,3.3,True, False, None]
print("Python类型:\n", a)
print("编码后的json串:\n", json.dumps(a))

3、可以进行自动的排序

>>> #coding=utf-8
... import json
>>>
>>> data = [ { 'a':'A', 'x':(2, 4), 'c':3.0,"b":"4" },]
>>> print(json.dumps(data))
[{"a": "A", "x": [2, 4], "c": 3.0, "b": "4"}]
>>> print(json.dumps(data, sort_keys=True))
[{"a": "A", "b": "4", "c": 3.0, "x": [2, 4]}]

>>> data = { 'a':'A', 'x':(2, 4), 'c':3.0,"b":"4" } >>> print(json.dumps(data, sort_keys=True)) {"a": "A", "b": "4", "c": 3.0, "x": [2, 4]}

4、会有展示的格式(indent=3指定缩进3个空格

>>> data =  [{"a""A""b": [2, 4], "c": 3.0}]
>>> print(json.dumps(data, sort_keys=True, indent=3))
[
   {
      "a""A",
      "b": [
         2,
         4
      ],
      "c": 3.0
   }
] 

5、去掉空格(:和,后的空格)

#separators=(',',':')

>>> data=[{"a":  "A",    "b":  [2,4],  "c":3.0}]
>>> print(len(json.dumps(data)))
35
>>> print(len(json.dumps(data,separators=(',',':'))))
29
>>>

6、转换格式失败设置过滤(skipkeys参数

(1,2)不能被设置为key

skipkeys参数默认为False

#(1,2)不能被设置为key
#(skipkeys=True)表示会过滤掉出错的
#coding=utf-8
import json

data= [ { 'a':'A''b':(2, 4), 'c':3.0, (1,2):'D tuple' } ]
print(u"不设置skipkeys 参数")
try :
  res1 = json.dumps(data) #skipkeys参数默认为False时
except Exception as e:
  print(e)

print(u"设置skipkeys 参数")
print(json.dumps(data, skipkeys=True))# skipkeys=True时 

7Json格式和字典类型的互转(ensure_ascii参数)

ensure_ascii默认为True

 

>>> import json

>>> print (json.dumps('中国’))

"\u4e2d\u56fd"

>>> print (json.dumps('中国',ensure_ascii=False))

"中国"

 

>>> print (json.dumps("中国"))

"\u4e2d\u56fd"

(1)转换之后是乱码的处理

 

>>> print (json.dumps({"中国":"光荣之路"}))
{"\u4e2d\u56fd""\u5149\u8363\u4e4b\u8def"} 


>>> print (json.dumps({"中国":"光荣之路"},ensure_ascii=False))
{"中国": "光荣之路"}

 

(2)Json——Dict(json转化为字典)

>>> #coding=utf-8
... import json
>>> data = [{'a':"Aasdf",'b':(2,4),'c':3.0}]
>>> data_json = json.dumps(data)
>>> print("encoding :", data_json)
encoding : [{"a": "Aasdf", "b": [2, 4], "c": 3.0}]
>>> print("decoding :", json.loads(data_json))
decoding : [{'a': 'Aasdf', 'b': [2, 4], 'c': 3.0}] 

bytes类型不能转换为json格式的数据

Socket协议传输的时候只能用bytes类型的数据

 

8、类对象编码成json

 

方法一:

 

#encoding=utf-8
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 obj_json(self, obj_instance):
    return {
      'name': obj_instance.name,
      'age': obj_instance.age,
      'sex': obj_instance.sex,
      'tel': obj_instance.tel }

emp = Employee('Lily', 24, 'female''18223423423')
print(json.dumps(emp, default = emp.obj_json))

 

方法二:

#encoding=utf-8
import json
class Employee(object):
  def __init__(self, name, age, sex, tel): 
    self.name = name
    self.age = age
    self.sex = sex
    self.tel = tel

 


emp = Employee('Lily', 24, 'female', '18223423423')
print(emp.__dict__)#__dict__实例的所有属性
print(json.dumps(emp, default = lambda Employee: Employee.__dict__))
print(json.dumps(emp, default = lambda emp: emp.__dict__))

 

 9、反序列化

#encoding=utf-8
import json

class Employee(object):
  def __init__(self, name, age, sex, tel): 
    self.name = name
    self.age = age
    self.sex = sex
    self.tel = tel
emp = Employee('Lily', 24, 'female', '18223423423')
def jsonToClass(emp):
  return Employee(emp['name'], emp['age'], emp['sex'], emp['tel'])
json_str = '{"name": "Lucy", "age": 21, "sex": "female", "tel": "15834560985"}'
e = json.loads(json_str, object_hook = jsonToClass)
print(e) 
print(e.name)

 

转载于:https://www.cnblogs.com/rychh/articles/11221977.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值