每日一python(5):json模块中的相关方法介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013003827/article/details/84395074

1、json.dumps()和json.loads()函数

说明:

  • json.dumps()函数是将一个Python数据类型进行json格式的编码(简单理解,json.dumps()函数是将字典转化为字符串)
  • json.loads()函数是将json格式数据转换为字典(简单理解,json.loads()函数是将字符串转化为字典)

实例代码:

# -*- coding: utf-8 -*-

import json
data = {
    'Mr Liu':{
        'sex': 'man',
        'address': '上海',
        'age': '31'
    },
    'Mrs Xie':{
        'sex': 'woman',
        'address': '天津',
        'age': '30'
    }

}
jsObj = json.dumps(data, sort_keys=True, indent=4, separators=(',',':'), ensure_ascii=False) # 格式化输出json串

print('data的类型:'+ str(type(data)))
print(data)
print('jsObj的类型: '+ str(type(jsObj)))
print(jsObj)
dataNew = json.loads(jsObj)  # 将json串又转换为数据类型字典
print('dataNew的类型: '+ str(type(dataNew)))
print(dataNew)

打印结果如下:

data的类型:<class 'dict'>
{'Mrs Xie': {'age': '30', 'address': '天津', 'sex': 'woman'}, 'Mr Liu': {'age': '31', 'address': '上海', 'sex': 'man'}}

jsObj的类型: <class 'str'>
{
    "Mr Liu":{
        "address":"上海",
        "age":"31",
        "sex":"man"
    },
    "Mrs Xie":{
        "address":"天津",
        "age":"30",
        "sex":"woman"
    }
}

dataNew的类型: <class 'dict'>
{'Mrs Xie': {'age': '30', 'address': '天津', 'sex': 'woman'}, 'Mr Liu': {'age': '31', 'address': '上海', 'sex': 'man'}}

json.dumps()参数说明:

  1. sort_keys:将数据根据key值按照字典排序(a到z)进行排序输出
  2. indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据;否则会换行且按照indent的数量显示前面的空白
  3. separators=(’,’,’:’):其作用是 去掉 逗号(,)和分号(:)后面的空格
  4. ensure_ascii:序列化时对中文默认使用的ascii编码;想输出真正的中文需要指定ensure_ascii=False

2、将字典内容写入json文件

注意:如果想要将字典内容写入json文件时,需要用json.dumps将字典转换为字符串,然后再写入;否则会报错!!(TypeError: write() argument must be str, not dict

例如:

# -*- coding: utf-8 -*-

import json
data = {
    'Mr Liu':{
        'sex': 'man',
        'address': '上海',
        'age': '31'
    },
    'Mrs Xie':{
        'sex': 'woman',
        'address': '天津',
        'age': '30'
    }

}

with open('data.json', 'w') as f:      # data.json为当前目录下的 json文件
    f.write(data)

运行结果如下:
在这里插入图片描述

从上面的运行结果,可以看到:要想将字典信息写入到json文件中,必须先要将dict转换为str才可以!!,如下操作可以成功:

# -*- coding: utf-8 -*-

import json
data = {
    'Mr Liu':{
        'sex': 'man',
        'address': '上海',
        'age': '31'
    },
    'Mrs Xie':{
        'sex': 'woman',
        'address': '天津',
        'age': '30'
    }

}

jsObj = json.dumps(data, sort_keys=True, indent=4, separators=(',',':'), ensure_ascii=False) # 格式化输出json串

with open('data.json', 'w') as f:   # data.json为当前目录下的 json文件
    #f.write(data)
    f.write(jsObj)

运行结果:
在这里插入图片描述
然后打开data.json文件,可以看到如下内容:
在这里插入图片描述

上面是通过文件的write()方法写入json文件,我们还可以通过使用json模块中的dump()方法,如下:

# -*- coding: utf-8 -*-

import json
data = {
    'Mr Liu':{
        'sex': 'man',
        'address': '上海',
        'age': '31'
    },
    'Mrs Xie':{
        'sex': 'woman',
        'address': '天津',
        'age': '30'
    }
}

with open('data1.json', 'w') as f:
    #f.write(data)
    #f.write(jsObj)
    json.dump(data, f, indent=4, ensure_ascii=False)

运行结果:
在这里插入图片描述

打开data1.json文件看到如下结果:
在这里插入图片描述
从结果中我们看到与用write()方法的结果一样。

3、从json文件中读取数据

实例代码:

# -*- coding: utf-8 -*-

import json

file = open('data.json', 'r')
info = json.load(file)
print(info)
print(type(info))
for key in info.keys():
    print('key: %s   value: %s' % (key, info.get(key)))

运行结果:

{'Mr Liu': {'age': '31', 'address': '上海', 'sex': 'man'}, 'Mrs Xie': {'age': '30', 'address': '天津', 'sex': 'woman'}}
<class 'dict'>
key: Mr Liu   value: {'age': '31', 'address': '上海', 'sex': 'man'}
key: Mrs Xie   value: {'age': '30', 'address': '天津', 'sex': 'woman'}

猜你喜欢

转载自blog.csdn.net/u013003827/article/details/84395074