Python3 网络传输数据的处理(json / xml / base64)
本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/72760548
以下代码以Python3.6.1为例
Less is more!
json
#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/4'
# json_demo.py json格式的数据
# 解析和创建json数据
# 编码: 默认编码为"ascii", 中文(非ASCII字符)将被转义
import json
class Person:
def __init__(self):
self.name = "luzhuo"
self.age = 23
self.lists = [4, 5, 6, "中文"]
data = {
"dicts": None, "class": None}
dicts = {
"name": "luzhuo", "age": 21, "lists": [1, 2, 3, "中文"]}
def json_encode():
'''
编码
'''
# 编码字典
data_dicts = json.dumps(dicts, indent=4)
print(data_dicts)
data["dicts"] = data_dicts
# 编码类
data_class = json.dumps(Person(), indent=4, default=lambda obj: obj.__dict__)
print(data_class)
data["class"] = data_class
def json_decode():
'''
解码
'''
# 解码字典
dicts = json.loads(data["dicts"])
print(dicts)
# 解码类(实际上是被解析成了字典)
clazz = json.loads(data["class"])
print(clazz)
def json_func():
# 将obj序列转为fp, skipkeys:是否跳过非Python基本类型的数据, ensure_ascii:是否将非ASCII字符转义, check_circular:是否进行容器循环引用检查, indent:格式化None/int, default:def default(obj):为不能为序列化的函数调用, sort_keys:是否按键排序
# 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)
json.dump(dicts, open("file.txt", "w"))
# 将obj序列转为json格式的str
# 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)
data_str = json.dumps(dicts)
# 从fp反序列化为python对象
# json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
data_dict = json.load(open("file.txt"))
# 从str反序列化为python对象
# json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
data_dict = json.loads(data_str)