Python 操作 JSON,⽹络数据交换不⽤愁

目录

 

1.JSON 是什么?

2.JSON 与XML 的优劣差异?

3.将 Python 对象编码成 JSON 字符串

4.将已编码的 JSON 字符串解码为 Python 对象

5.解决中⽂乱码问题


1.JSON 什么

JSON 的全JavaScript Object Notation量级的数据换格最初JSON JavaScript 的⼦集简单易⽤⽽迅速

分编语⾔⽀持对 JSON 的解析⽣成些年异突起NoSQL 数据库也JSON 来设计数据存储格Mongodb BSONBinary JSON

JSON   数据类numberbooleanstringnullarrayobject种很好理解null Python NonePython 的列表字典

{
    "name": "⼩明",
    "age": 14,
    "gender": true,
    "grade": null,
    "skills": [
        "JavaScript",
        "Java",
        "Python"
    ]
}

2.JSON XML 的优劣差

JSON 出现⼈们XML ⽹络换数据JSON 出现它基本取代了 XML 者的共同之处显⽽易⻅是结构化的语⾔可以⽹络数据的

者最⼤的差就是它被创的⽬的

XML W3C(万维⽹联盟布的扩展标记语⾔Extensible Markup Language),最初设计来HTML 以 强 ⼤ 的 扩 展 ⽹ 络 信 息 发 布 的 需 要 , 与 的 有 XHTML\CSS\ECMAScript

它包DTDXSDXPathXSL ⼤堆复杂的规范数据存储扩展⾼级检索⽅⾯来被⽤⽹络数据颇有点⼤材⼩⽤的意虽然却也有点复杂

JSON ECMAScript 标准的⼦集设计初就是为了克服 XML 数据的劣势

它像 XML 样具有晰的层次结构⽅⾯它⽐ XML ⼩巧精致更加⽹络数据的输。

JSON 有缺点结构层级多的时陷⼊繁琐复杂的数据节点查找要⽐ XML

3.将 Python 象编JSON

将  Python  的对符串程也称为序列化,与相对将  JSON  符串为  Python  称为反序列化

列化格下,json.dumps() Python 象序列化json.dump() 列化将内容存⼊⽂

  json.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) json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False,

**kw)

In [1]:import json
In [2]:d = dict(name='Tom', age='8', score=88)
In [3]:json.dumps(d)
Out[3]:'{"name": "Tom", "age": "8", "score": 88}'
In [4]:with open('test.json', 'w') as f:
...:json.dump(d, f)

⽤的⽐多的数有

  • ensure_ascii=True 设置是编码ASCII默认是False使编码格
  • indent=None 设置打时缩默认
  •  separators=None 设置分隔(item_separator, dict_separator)元组默认(,,:)keys间⽤,keyvalue间⽤:
  •  sort_keys=False 设置按key默认
In[15]:d = dict(name='Python猫',age='8',score=88)

In[16]:json.dumps(d)
Out[16]:'{"name":"Python\\u732b","age":"8","score":88}'

In[17]:json.dumps(d,ensure_ascii=False,indent=4,sort_keys=True)
Out[17]:'{\n"age":"8",\n"name":"Python猫",\n"score":88\n}'
In[18]:print(json.dumps(d,ensure_ascii=False,indent=4,sort_keys=True))
{
    "age": "8",
    "name": "Python猫",
    "score": 88
}

4.将已码的 JSON 串解码为 Python

反序列化格下,json.loads() 内存内容解析json.load() 件中内容解析

 

  •   json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
  • json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
In[1]:import json
In[2]:d = dict(name='Tom',age='8',score=88)
In[3]:tom_json = json.dumps(d)
In[4]:json.loads(tom_json)
Out[4]:{'age':'8','name':'Tom','score':88}
In [5]:with open('test.json','r') as f:

...:print(json.load(f))

{'name':'Tom','age':'8','score':88}

json.loads() json.load() ⼀个 encoding 可以⼊的字符串重新编码

5.解决中⽂乱码问题

列化的 ensure_ascii 反序列化的 encoding 相对是处理字编码,⼀旦处理导致码问题

Python2 的字编码⼋糟也⼴诟病如果Python2 项⽬可参照如⼦解决

符串Python2 的表unicode 编码。因做编码换时需要unicode 作为中间编码先将其编码的字符串解码decodeunicodeunicode 编码encode编码

# -*- coding: utf-8 -*-
m = {'a':'你好'}

print m
=>{'a':'\xe4\xbd\xa0\xe5\xa5\xbd'}

print json.dumps(m)
=>{"a":"\u4f60\u597d"}

print json.dumps(m,ensure_ascii=False)
=>{"a":"浣犲ソ"}
print json.dumps(m,ensure_ascii=False).decode('utf8').encode('gb2312')
=>{"a":"你好"}

 Python3 的默认编码格utf-8需要 ensure_ascii=False 就能解决

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值