python处理json和yaml

前言

本文为在霍格沃兹测试开发学社的学习经历分享,希望有志同道合的小伙伴可以一起交流技术,一起进步~

Json

  • Json是轻量级的数据交换格式,是前端和后端交互的时候,统一的一种数据交换格式

  • 友好,易于读写,对机器友好,易于解析和生成

  • 由列表和字典组成

使用场景:

  • 将对象生成为字符串,存入文件、数据库,在网络传输等

  • 解析来自文件、数据库、网络传输的字符串成python对象

  • 跨语言的数据交换,如python和c/c++/java/javascripts的数据交换

JSON有两种表示结构,对象和数组。

  • 对象结构以”{}”大括号开始和结束,中间部分由0或多个以”,”分隔的键值对(key:value)构成。其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组。
  • 数组结构以”[ ]”开始和结束,中间由0或多个以”,”分隔的值列表组成。

常用方法:

  • json.dumps(python_obj) 把数据类型转换成字符串

  • json.loads() 把字符串换成json

  • json.dump() 把数据类型转换成字符串并存储在文件中

  • json.load(file_stream) 把文件打开,把里面的字符转换成数据类型

import json
data = {
    'name':'jerry',
    'age':'26',
    'gender':'female'
}
print(type(data))

data1 = json.dumps(data)                #转化成字符串格式
print(data1)
print(type(data1))

data2 = json.loads(data1)               #把字符串格式转化成json
print(type(data2))
  • python与json数据类型对应关系
python json 说明
dict object 字典
list,tuple array 序列
str string 字符串
int,float number 数字类型
True true 布尔值true
False false 布尔值false
None null 空值
常用参数实例:
data = {
    'a':1,
    'b':[12,34,5],
    'c':True,
    'd':"霍格"
}
#indent控制缩进,ensure_ascii控制编码,如果有中文需要设置成False
json_data = json.dumps(data,ensure_ascii=False,indent=4)
print(json_data)
  • json.dumps() 函数是将一个 Python 数据类型列表(可以理解为字典)进行json格式的编码(转换成字符串,用于传播)

dict = {"age": "12"}
json_str = json.dumps(dict)
  • json.loads() 函数是将 json 格式数据(字符串)转换为字典(方便取出里面的数据),和 json.dumps() 正好相反
json_str = '{"age": "12"}'
dict = json.loads(json_str)
age = dict['age']
  • json.dump() 函数用于将 json 信息(字符串)写进文件
json_str = "{'age': '12'}"
file = open('1.json', 'w', encoding='utf-8')
json.dump(json_str, file)
  • json.load() 函数用于读取 json 信息(文件)转成字符串,和 json.dump() 相反
file = open('1.json', 'r', encoding='utf-8')
info = json.load(file)

总结

python处理json和yaml_第1张图片

yaml

  1. 定义:一种数据序列化格式,用于人类可读性,与脚本语言的交互两方面。被认为可以超越XML和JSON的配置文件

基本语法:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用tab键,只能使用空格
  • 缩进的空格数量不重要,只要相同层级的元素左侧对齐即可
  • #表注释
  1. YAML支持的数据结构:
  • 对象:键值对的集合,用冒号表示
  • 数组:一组按次序排列的值,前面加“-”(数组对应着python中的列表)
  • 纯量:单个的,不可再分的值
  • 字符串,布尔值,整数,浮点数,Null,时间,日期
#注释
#1-字典  键: 值
username: xiaoming  #冒号后面是空格
password: 123456
info: 配置  #中文不建议使用,有可能会乱码
#字典嵌套
NAME_PSW:
  name:xiaoming
  password:123456

#2-列表格式
-10
-20
-30

# 列表嵌套
-10
-20
-
 -100
 -200

#3-列表嵌套字典
-10
-20
-
 name: tom
 password: 123456

#4 字典嵌套列表
name: TOM
info:
   -10
   -20
   -30
#5 引号 如果是有英文字母或者中文的,不加引号也是字符串
info: "HELLO world"  #引号可以不加 

#如果有转义字符\n等,不加引号就原样输出,如果显示特殊字符效果,就加双引号
info: "HELLO\nworld"

#6 引用 一个数据可以使用很多地方,使用变量
# &变量名   定义变量
# *变量名   引用变量
name: &a tom
name1: *a

#7 能不能多个YAML 写在一起,有字典也有列表  ,加分隔符  ---
-10
-20
-30
---
name: sq

#8 yamL文件可以嵌套yaml
DATA: conf.yaml
  1. 创建yaml文件
import yaml

data = {
    "client":{"default":"utf-8"},
    "mysql":{"user":"root","password":123},
    "custom":{
        "user1":{"user":"张三","pwd":666},
        "user2":{"user":"李四","pwd":999},
    }
}
#用dump方法将python对象转成yaml格式的文件
with open('./my.yaml','w',encoding='utf-8') as f:
    # 如果写入的对象含有中文,需要设置一个参数,allow_unicode为True,这样就可以正常显示中文了
    yaml.dump(data,f,allow_unicode=True)
  1. 读取yaml文件
#读取yaml文件中的内容转化成python对象
import yaml

with open('./my.yaml','r',encoding='utf-8') as f:
    #解析流中的第一个YAML文档并生成相应的Python对象。
    data = yaml.safe_load(f)

print(data)
print(type(data))

推荐阅读文章链接:接口测试经典面试题:Session、cookie、token有什么区别?_霍格沃兹测试开发学社的博客-CSDN博客

你可能感兴趣的:(python,python,json,开发语言)