python基础修改haproxy配置文件

1.通过eval(),可以将字符串转为字典类型。

2.Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个字符串

Decode过程,是把json对象转换成python对象的一个过程,常用的两个函数是loads和load函数。区别跟dump和dumps是一样的。

if __name__ == '__main__':
    # 将python对象test转换json对象
    test = [{"username":"测试","age":16},(2,3),1]
    print type(test)
    python_to_json = json.dumps(test,ensure_ascii=False)
    print python_to_json
    print type(python_to_json)

    # 将json对象转换成python对象
    json_to_python = json.loads(python_to_json)
    print json_to_python
    print type(json_to_python)

运行结果如下:

具体见:https://www.cnblogs.com/loleina/p/5623968.html

3.在Python中,json数据与dict字典以及对象之间可以相互转化,在Python中自带json库。通过import json导入。

在json模块有2个方法,

  • loads():将json数据转化成dict数据
  • dumps():将dict数据转化成json数据
  • load():读取json文件数据,转成dict数据
  • dump():将dict数据转化成json数据后写入json文件

示例:

dict字典转json数据

import json
def dict_to_json():
    dict = {}
    dict['name'] = 'many'
    dict['age'] = 10
    dict['sex'] = 'male'
    print(dict)  # 输出:{'name': 'many', 'age': 10, 'sex': 'male'}
    j = json.dumps(dict)
    print(j)  # 输出:{"name": "many", "age": 10, "sex": "male"}
if __name__ == '__main__':
    dict_to_json()

对象转json数据

import json
def obj_to_json():
    stu = Student('007', '007', 28, 'male', '13000000000', '[email protected]')
    print(type(stu))  # <class 'json_test.student.Student'>
    stu = stu.__dict__  # 将对象转成dict字典
    print(type(stu))  # <class 'dict'>
    print(stu)  # {'id': '007', 'name': '007', 'age': 28, 'sex': 'male', 'phone': '13000000000', 'email': '[email protected]'}
    j = json.dumps(obj=stu)
    print(j)  # {"id": "007", "name": "007", "age": 28, "sex": "male", "phone": "13000000000", "email": "[email protected]"}
if __name__ == '__main__':
    obj_to_json()

json数据转成dict字典

import json
def json_to_dict():
    j = '{"id": "007", "name": "007", "age": 28, "sex": "male", "phone": "13000000000", "email": "[email protected]"}'
    dict = json.loads(s=j)
    print(dict)  # {'id': '007', 'name': '007', 'age': 28, 'sex': 'male', 'phone': '13000000000', 'email': '[email protected]'}
if __name__ == '__main__':
    json_to_dict()

json数据转成对象

import json
def json_to_obj():
    j = '{"id": "007", "name": "007", "age": 28, "sex": "male", "phone": "13000000000", "email": "[email protected]"}'
    dict = json.loads(s=j)
    stu = Student()
    stu.__dict__ = dict
    print('id: ' + stu.id + ' name: ' + stu.name + ' age: ' + str(stu.age) + ' sex: ' + str(
        stu.sex) + ' phone: ' + stu.phone + ' email: ' + stu.email)  # id: 007 name: 007 age: 28 sex: male phone: 13000000000 email: [email protected]

if __name__ == '__main__':
    json_to_obj()

json的load()dump()方法的使用

dump()方法的使用

import json
def dict_to_json_write_file():
    dict = {}
    dict['name'] = 'many'
    dict['age'] = 10
    dict['sex'] = 'male'
    print(dict)  # {'name': 'many', 'age': 10, 'sex': 'male'}
    with open('1.json', 'w') as f:
        json.dump(dict, f)  # 会在目录下生成一个1.json的文件,文件内容是dict数据转成的json数据

if __name__ == '__main__':
    dict_to_json_write_file()

load()方法的使用

import json

def json_file_to_dict():
    with open('1.json', 'r') as f:
        dict = json.load(fp=f)
        print(dict)  # {'name': 'many', 'age': 10, 'sex': 'male'}


if __name__ == '__main__':
    json_file_to_dict()

4.如果执行代用json的程序,报No JSON object could be decode时,解决方法:

(1)该数据不符合JSON格式,参考格式见:https://jsonlint.com/

该环境为2.7

(2)windows系统上写入文件时选择UTF-8格式,将文件另存为无BOM的UTF-8格式就好

(3) 如果爬取网络数据,服务器返回的数据是经过压缩的,JSON的API无法解析

 确认服务器返回给自己的数据是否经过压缩,判断方法:

response = urllib2.urlopen(request)
print response.info().get('Content-Encoding')

这会打印出服务器返回数据的压缩方式,如果未有压缩则返回None

若发现数据是经过压缩的,则下面有两种方法解决:

方法一:在request中加入"Accept-Encoding":"gzip, deflate"表明希望服务器返回压缩过的数据,所以查看自己的代码中是否有包含该语句,若有进行删除即可

方法二:打印出服务器返回的数据的压缩方式后,用对应的方法进行数据解压后,再用JSON函数进行解析

案例(采用gzip压缩):

 方法对比:服务器进行数据压缩再返回,可以加快数据的传输速度。

 

  

  

猜你喜欢

转载自www.cnblogs.com/iexperience/p/9022315.html