使用python脚本将swagger接口转化为Excel格式查看

本文介绍了如何将Swagger接口的JSON文件转换为Excel格式,详细阐述了转换过程,包括读取JSON文件、解析内容并写入Excel。同时,文章提供了Python脚本示例,展示了如何利用json模块将JSON数据转换为Python对象并创建Excel文档。最后,讨论了JSON格式、JSON与Python数据类型的映射关系,并提到了jsonpath工具在处理JSON数据时的作用。
摘要由CSDN通过智能技术生成

需求:将swagger接口JSON文件转化为Excel格式查看,如下格式

swagger转Excel
路径请求方法tags分类summary描述
/loginpost登录登录接口

过程

先下载swagger接口的JSON文件,然后修改保存为txt文件。

 举例几种下载swagger接口文件的格式地址:

 

 代码脚本将文件转化为Excel文档接口清单

 

import json

import xlwt

api_excel = xlwt.Workbook(encoding='utf-8')  # 创建一个文档
api_sheet = api_excel.add_sheet('CRM接口')  # 添加一个sheet
json_file = open('api-docs.txt', encoding='utf-8')  # 打开保存的swagger文本文档
api_data = json.load(json_file)  # 将文档json内容转换为Python对象
api = api_data['paths']  # 取swagger文件内容中的path,文件中path是键名
path_list = []  # 创建接口地址空列表
method_list = []  # 创建请求方式空列表
tags_list = []  # 创建接口分类空列表S
summary_list = []  # 创建接口描述空列表
for path in api.keys():  # 循环取key
    values = api[path]  # 根据key获取值
    method = tuple(values.keys())[0]  # 获取请求方式,文件中请求方式是key
    path_list.append(path)  # 将path写入接口地址列表中
    method_list.append(method)  # 将method写入请求方式列表中
    if method == 'get':  # key为get时从get里面取分类和描述,key为post时从post里面取分类和描述
        tags = values['get']['tags'][0]  # 获取接口分类
        summary = values['get']['summary']  # 获取接口描述
        tags_list.append(tags)  # 将接口分类写入列表中
        summary_list.append(summary)  # 将接口描述写入列表中
    if method == 'post':
        tags = values['post']['tags'][0]
        summary = values['post']['summary']
        tags_list.append(tags)
        summary_list.append(summary)
    if method == 'delete':
        tags = values['delete']['tags'][0]
        summary = values['delete']['summary']
        tags_list.append(tags)
        summary_list.append(summary)
for i in range(len(path_list)):  # 将接口path循环写入第一列
    api_sheet.write(i, 0, path_list[i])
for j in range(len(method_list)):  # 将请求方式循环写入第二列
    api_sheet.write(j, 1, method_list[j])
for m in range(len(tags_list)):  # 将接口分类循环写入第三列
    api_sheet.write(m, 2, tags_list[m])
for n in range(len(summary_list)):  # 将接口描述循环写入第四列
    api_sheet.write(n, 3, summary_list[n])
api_excel.save('接口地址.xls')  # 保存文件

结语

有些开发可能没有添加路径,导致导出的格式接口有遗漏,需要排查,所以尽可能让开发把接口文档写规范,再运行次脚本。或者有兴趣的高手优化一下,一起进步!

如下带路径和不带路径,不带路径的无法识别导出,有兴趣的可以优化一下,艾特博主,谢谢!

思路:


关于JSON

JSON是一个标记符序列。这套标记符包括:构造字符、字符串、数字和三个字面值

构造字符

JSON包括六个构造字符,分别是:左方括号、右方括号、左大括号、右大括号、冒号与逗号。

JSON值

JSON值可以是对象、数组、数字、字符串或者三个字面值(false、true、null),并且字面值必须是小写英文字母。

对象

对象是由花括号括起来,逗号分割的成员构成,成员是字符串键和上面所说的JSON值构成,例如:

{"name":"jack","age":18,"address":{"country"}}

数组

数组是由方括号括起来的一组数值构成,例如:

[1,2,32,3,6,5,5]

字符串与数字想必就不用我过多叙述吧。

下面我就举例一些合法的JSON格式的数据:

{"a":1,"b":[1.2.3]}
[1,2,"3",{"a":4}]
3.14
"json_data"

为什么要使用JSON

JSON是一种轻量级的数据交互格式,它使得人们很容易的进行阅读和编写。同时也方便机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

JSON的使用方法

json.loads()

把JSON格式字符串解码转成Python对象,从JSON到Python类型转换表如下:

JSONPython
objectdict
arraylist
stringstr
number(int)int
number(real)float
trueTrue
falseFalse
nullNone
  • 将数组转成列表对象

import json


strList = "[1,2,3,3,4]"
print(json.loads(strList))
print(type(json.loads(strList)))

试着运行上面的代码,你会发现已经成功的将strList转换为列表对象。

  • 将对象转换成字典

import json


strDict = '{"city":"上海","name":"jack","age":18}'
print(json.loads(strDict))
print(type(json.loads(strDict)))

试着运行上面的代码,你会发现已经成功的将object转换为dict类型的数据。

json.dumps()

其实这个方法也很好理解,就是将Python类型的对象转换为json字符串。从Python类型向JSON类型转换的对照表如下:

pythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull
  • 将Python列表对象转换为JSON字符串

import json


list_str = [1,2,3,6,5]
print(json.dumps(list_str))
print(type(json.dumps(list_str)))

试着运行上面的代码,你会发现成功的将列表类型转换成了字符串类型。

  • 将Python元组对象转换为JSON字符串

import json


tuple_str = (1,2,3,6,5)
print(json.dumps(tuple_str))
print(type(json.dumps(tuple_str)))

试着运行上面的代码,你会发现成功的将元组类型的数据转换成了字符串。

  • 将Python字典对象转换为JSON字符串

import json 


dict_str = {"name": "小明", "age":18, "city": "中国深圳"}
print(json.dumps(dict_str))
print(type(json.dumps(dict_str)))

输出结果:

{"name": "\u5c0f\u660e", "age": 18, "city": "\u4e2d\u56fd\u6df1\u5733"}
<class 'str'>

看到上面的输出结果也许你会有点疑惑,其实不需要疑惑,这是ASCII编码方式造成的,因为json.dumps()做序列化操作时默认使用的就是ASCII编码,因此我们可以这样写:

import json


dict_str = {"name": "小明", "age":18, "city": "中国深圳"}
print(json.dumps(dict_str, ensure_ascii=False))
print(type(json.dumps(dict_str)))

输出结果:

{"name": "小明", "age": 18, "city": "中国深圳"}
<class 'str'>

因为ensure_ascii的默认值是True,因此我们可以添加参数ensure_ascii将它的默认值改成False,这样编码方式就会更改为utf-8了。

json.load()

该方法的主要作用是将文件中JSON形式的字符串转换为Python类型。

具体代码示例如下:

import json

str_list = json.load(open('position.json', encoding='utf-8'))
print(str_dict)
print(type(str_dict))

运行上面的代码,你会发现成功的将字符串类型的JSON数据转换为了dict类型。

代码中的文件position.json我也会分享给大家。

  • json.dump()

将Python内置类型序列化为JSON对象后写入文件。具体代码示例如下所示:

import json

list_str = [{'city':'深圳'}, {'name': '小明'},{'age':18}]
dict_str = {'city':'深圳','name':'小明','age':18}

json.dump(list_str, open('listStr.json', 'w'), ensure_ascii=False)
json.dump(list_str, open('dictStr.json', 'w'), ensure_ascii=False)

jsonpath

XML精彩强调的优点是提供了大量的工具来分析、转换和有选择地从XML文档中提取数据。Xpath是这些功能强大的工具之一。

对于JSON数据来说,是否应该出现jsonpath这样的工具来解决这个问题。

  • 数据可以通过交互方式从客户端上的JSON结构提取,不需要特殊的脚本。
  • 客户端请求的JSON数据可以减少到服务器的上的相关部分,从而大幅度减少服务器响应的带宽使用。

jsonpath表达式始终引用JSON结构的方式与Xpath表达式与XML文档使用的方式相同。

jsonpath的安装方法

pip install jsonpath

jsonpath与Xpath

下面表格是jsonpath语法与Xpath的完整概述和比较。

Xpathjsonpath概述
/$根节点
.@当前节点
/.or[]取子节点
**匹配所有节点
[][]迭代器标识(如数组下标,根据内容选值)
//...不管在任何位置,选取符合条件的节点
n/a[,]支持迭代器中多选
n/a?()支持过滤操作
n/a()支持表达式计算

下面我们就通过几个示例来学习jsonxpath的使用方法。

我们先来看下面这段json数据

{ "store": {
    "book": [
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

获取符合条件的节点

假如我需要获取到作者的名称该怎么样写呢?

如果通过Python的字典方法来获取是非常麻烦的,所以在这里我们可以选择使用jsonpath.。

具体代码示例如下所示:

import jsonpath


author = jsonpath.jsonpath(data_json, '$.store.book[*].author')
print(author)

运行上面的代码你会发现,成功的获取到了所有的作者名称,并保存在列表中。

或者还可以这样写:

import jsonpath

author = jsonpath.jsonpath(data_json, '$..author')
print(author)

使用指定索引

还是使用上面的json数据,假如我现在需要获取第三本书的价格。

third_book_price = jsonpath.jsonpath(data_json, '$.store.book[2].price')
print(third_book_price)

运行上面的代码,你会发现成功的获取到了第三本书的价格。

使用过滤器

isbn_book = jsonpath.jsonpath(data_json, '$..book[?(@.isbn)]')
print(isbn_book)
print(type(isbn_book))

通过运行上面的代码,你会发现,成功的将含有isbn编号的书籍过滤出来了。

同样的道理,根据上面的例子,我们也可以将价格小于10元的书过滤出来。

book = jsonpath.jsonpath(data_json, '$..book[?(@.price<10)]')
print(book)
print(type(book))

通过运行上面的代码,你会发现这里已经成功的将价格小于10元的书提取出来了。

jsonpath其实是非常适合用来获取json格式的数据的一款工具,最重要的是这款工具轻量简单容使用。关于jsonpath的介绍到这里就结束了,有兴趣的就试试吧!

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值