【Python基础】第十八篇 | JSON文件的处理

JSON文件的处理

json文件也是一个文本文件,就可以直接使用read()和write()方法去操作文件,只是使用这两个方法不方便,所以对json文件有自己独特的读取和写入的方法.
常用在 做测试的时候,将测试数据定义为json文件格式,使用代码读取json文件,即读取测试数据,进行传参(参数化)
json的介绍:
json基于文本,独立于语言的轻量级的数据交换格式

  • 基于文本,是一个文本文件
  • 独立于语言,不是某个语言特有的,每种编程语言都可以使用的。
  • 轻量级,相同的数据,和其它格式相比,占用的大小比较小
  • 数据交换格式,后端程序员给前端的数据(html,json,xml)

Json文件的语法

1.json文件的后缀是.json
2.json中主要数据类型为 对象({} 类似python中字典)和数据[], 类似python中的列表),对象和数组可以互相嵌套
3.一个json文件是一个对象或者数据(即json文件的最外层要么是一个{},要么是一个数组[])
4.json中的对象是由键值对组成的,每个数据之间使用逗号隔开,但是最后一个数据后边不要写逗号
5.json中的字符串必须使用双引号
6.json中的其他数据类型 数字类型 —> int float string字符串 —> str 布尔类型 true,false —> True,False null —> None

json文件的书写

我叫小明,我今年18岁,性别男,爱好 听歌,游戏,购物,吃饭,睡觉,打豆豆
我的居住地址为 国家 中国,城市上海
我叫小红,我今年17岁,性别女,爱好 听歌,学习,购物
我的居住地址为 国家 中国,城市北京

  • 读取json文件

1.导包import json
2.读打开文件
3.读文件
json.load(文件对象)

返回的是字典(文件中的对象)或者列表(文件中的数组)

# 1.导入json
import json
# 2.读打开文件 (单个)
with open('info.json',encoding='utf-8') as f:
    # 3.读取文件
    # buf = f.read()
    # print(type(buf),buf)
    result = json.load(f)
    print(type(result))
    # 姓名
    print(result.get('name'))
    # 年龄
    print(result.get("age"))
    # 城市
    print(result.get("address").get("city"))

info.json

{
    "name":"小明",
    "age":18,
    "sex":"男",
    "isMen":true,
    "like":["听歌","游戏","购物","吃饭","睡觉","打豆豆"],
    "address":{
        "country":"中国",
        "city":"上海"
    }
}
import json
with open("info2.json",encoding="utf-8") as f:
    info_list = json.load(f)
    for info in info_list:
        print(info.get('name'),info.get('age'),info.get('address').get('city'))

info2.json

[
    {
        "name":"小明",
        "age":18,
        "sex":"男",
        "isMen":true,
        "like":["听歌","游戏","购物","吃饭","睡觉","打豆豆"],
        "address":{
            "country":"中国",
            "city":"上海"
        }
    },
    {
        "name":"小红",
        "age":17,
        "sex":"女",
        "isMen":false,
        "like":["听歌","学习"],
        "address":{
            "country":"中国",
            "city":"北京"
        }
    }
]

某网站的测试数据如下,需求,提取json文件中用户名,密码和预期结果
组成如下格式[{},{},{}]

import json

def read_data():
    new_list =[]
    with open('info3.json',encoding='utf-8') as f:
        data = json.load(f) #列表
        for i in data: # i 字典
            new_list.append((i.get("desc"),i.get("username"),i.get("password"),i.get("expect")))
        # print(new_list)
    return new_list

print(read_data())

info3.json

[
    {
        "desc":"正确的用户名密码",
        "username":"admin",
        "password":"123456",
        "expect":"登录成功"
    },
    {
        "desc":"错误的用户名",
        "username":"root",
        "password":"123456",
        "expect":"登录失败"
    },
    {
        "desc":"错误的密码",
        "username":"admin",
        "password":"123123",
        "expect":"登录失败"
    }
]
  • json的写入

文件对象.write(字符串) 不能直接将Python的列表和字典作为参数传递
想要将Python中的数据类型存为json文件,需要使用json提供的方法,不再使用write
步骤:

1.导包import json
2.写(w) 方式打开文件
3.写入 json.dump(Python中数据类型,文件对象)

import json
my_list = [('admin','123456','登录成功'),('root','123456','登录失败'),('admin','123123','登录失败')]
with open('info4.json','w',encoding='utf-8') as f:
    # json.dump(my_list,f)
    # 直接显示中文,不以ASCII的方式显示
    # json.dump(my_list,f,ensure_ascii=False)
    # 显示缩进
    json.dump(my_list,f,ensure_ascii=False,indent=2)

info4.json

[
  [
    "admin",
    "123456",
    "登录成功"
  ],
  [
    "root",
    "123456",
    "登录失败"
  ],
  [
    "admin",
    "123123",
    "登录失败"
  ]
]

你可能感兴趣的:(#,Python,python)