Python Json

1、 Python 对象转为 JSON 串

  函数 : json.dumps()

  功能 : 把 Python 对象转变为 JSON 串

  参数 : 可以是列表,字典,字符串, bool 类型等 Python 对象都可以

  返回类型 : 字符串

  备注 : /

# -*- coding: UTF-8 -*-
import json

listJson = json.dumps([1, 2, 3])
print 'json.dumps() 返回类型为:', type(listJson)
print '列表转换为 json 是:', listJson

dicJson = json.dumps({'aaa' : 1, 'bbb' : 2, 'ccc' : 3})
print '字典转换为 json 是:', dicJson

  运行结果

json.dumps() 返回类型为: <type 'str'>
列表转换为 json 是: [1, 2, 3]
字典转换为 json 是: {"aaa": 1, "bbb": 2, "ccc": 3}

 

2、 JSON 串转变为 Python 对象

  函数 : json.loads()

  功能 :  JSON 串转变为 Python 对象

  参数 : JSON 串

  返回类型 : 根据转换的 JSON 串来确定,比如转换字典,返回类型就是字典,转换列表,返回类型就是列表

  备注 : /

# -*- coding: UTF-8 -*-
import json

nowPythonObject = json.loads('{"aaa": 1, "bbb": 2, "ccc": 3}')
print type(nowPythonObject)
print nowPythonObject

print type(json.loads('[1, 2, 3]'))
print json.loads('[1, 2, 3]')

  运行结果

<type 'dict'>
{u'aaa': 1, u'bbb': 2, u'ccc': 3}
<type 'list'>
[1, 2, 3]

  PS : 咦,怎么转变的字典中有个 'u' 呢,它其实是代表 unicode 码类型,表示解析出来的 Python 对象 aaa 是用 unicode 码进行编码的

 

3、 读取 .json 文件

  函数 : json.load()

  功能 : 读取 .json 文件

  参数 : .json 文件对象,直接传递 .json 文件路径是不可以的,必须打开 .json 文件,然后传递打开的文件对象

  返回类型 :  根据转换的 JSON 串来确定,比如转换字典,返回类型就是字典,转换列表,返回类型就是列表

# -*- coding: UTF-8 -*-
import json

filePointer = open('testJson.json', 'r')
print json.load(filePointer)
filePointer.close()

  运行结果

{u'a': [100, {u'10': [[u'iPhone', 3600], [u'Xiaoming', 20], [u'Xiaohong', 30]]}]}

 

4、 常见错误

  异常信息提示

No JSON object could be decoded

  错误原因分析(第一种代码错误直接看截图,第二种是 .json 文件不正确,重新找一个 .json 文件即可)

  解决办法 : 直接删除错误原因的那一行,你可以对照该错误案例来跟正你的代码 (还有一种情况就是 .json 文件不正确,那样子你需要找一个对的 .json 文件)

 

5、封装为类

# -*- encoding=utf-8 -*-
import json
import os
import WriteLog


class ReadJson:
    def __init__(self, ):
        self.json_name = ''
        self.json_data = {}
        self.log = WriteLog.WriteLog('ITC_LOG.LOG')

    def _set_json_name(self, json_name):
        self.json_name = json_name.strip()

    def _load_json_data(self):
        if os.path.isfile(self.json_name):
            try:
                with open(self.json_name, 'r') as file_handler:
                    self.json_data = json.load(file_handler)
            except Exception as e:
                self.log.error('Load json file fail:{}'.format(self.json_name))
                self.log.error('Exception:{}'.format(e))
        else:
            self.log.error('Can not find json file:{}'.format(self.json_name))

    def _get_json_data(self):
        return self.json_data

    def get_data(self, json_name):
        self._set_json_name(json_name.strip())
        self._load_json_data()
        return self._get_json_data()


if __name__ == '__main__':
    readJon = ReadJson()
    print readJon.get_data('queuesettings.json')

6、写入文件

# -*- encoding=utf-8 -*-
import json

if __name__ == '__main__':
    json_dict = {}
    json_dict['a'] = 1
    json_dict['b'] = 2
    json_dict['c'] = '123'
    print json_dict
    with open('writeJson.json', 'w') as f:
        json.dump(json_dict, f)

有时候会报错,那就用下面的写法

# -*- encoding=utf-8 -*-
import json

if __name__ == '__main__':
    json_dict = {}
    json_dict['a'] = 1
    json_dict['b'] = 2
    json_dict['c'] = '222'
    # print json_dict
    data = json.dumps(json_dict)
    with open('writeJson.json', 'w') as f:
        f.write(data)

 写入文件不支持中文,添加参数ensure_ascii=False即可

json.dump(data_dict,f,ensure_ascii=False)
posted @ 2019-08-16 11:15  南风丶轻语  阅读(227)  评论(0编辑  收藏  举报