欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

json增强器脚本(适用于转义字符滥用导致json无法被格式化解析的情况)

程序员文章站 2024-03-14 19:45:53
...

1.背景

在抓取头条App的接口的时候,发现有的接口从Charles直接复制到谷歌插件JSON-handle之后可读性非常差,如下所示。以content字段为例,没有被正确的json格式解析。

json优化前

https://www.bilibili.com/video/BV1Q54y1v7qV/

2.操作流程

command+c复制待解析字符串 - Alfred唤起python脚本 - python获取剪贴板内容 - json重解析 - 结果写入剪贴板 - command+v使用

如下所示

alfred版json重解析

https://www.bilibili.com/video/BV1eh411Z7AD/

3.关键代码

import json
import pyperclip

def getJsonDict(jsonData: dict):
    if type(jsonData) != dict:
        return
    for i in jsonData.keys():
        try:
            jsonData[i] = json.loads(jsonData[i])
            getJsonDict(jsonData[i])
        except TypeError:

            if (type(jsonData[i])) == dict:
                getJsonDict(jsonData[i])

            if (type(jsonData[i])) == list:
                for index in range(len(jsonData[i])):
                    try:
                        jsonData[i][index] = json.loads(jsonData[i][index])
                        getJsonDict(jsonData[i][index])
                    except TypeError:
                        if (type(jsonData[i][index])) == dict:
                            getJsonDict(jsonData[i][index])
                    except json.decoder.JSONDecodeError:
                        if (type(jsonData[i][index])) == dict:
                            getJsonDict(jsonData[i][index])

        except json.decoder.JSONDecodeError:

            if (type(jsonData[i])) == dict:
                getJsonDict(jsonData[i])

            if (type(jsonData[i])) == list:
                for index in range(len(jsonData[i])):
                    try:
                        jsonData[i][index] = json.loads(jsonData[i][index])
                        getJsonDict(jsonData[i][index])
                    except TypeError:
                        if (type(jsonData[i][index])) == dict:
                            getJsonDict(jsonData[i][index])
                    except json.decoder.JSONDecodeError:
                        if (type(jsonData[i][index])) == dict:
                            getJsonDict(jsonData[i][index])

if __name__ == '__main__':
    jsonData = json.loads(pyperclip.paste())
    getJsonDict(jsonData)
    pyperclip.copy(json.dumps(jsonData))
    items = {"items": []}
    template = {
        "title": "",
        "subtitle": "",
        "arg": ""
    }
    template["title"] = "success"
    template["subtitle"] = "success"
    template["arg"] = "success"
    items["items"].append(template);
    print(json.dumps(items))

4.Alfred的workflow文件

评论留下邮箱发你

相关标签: 测试工程师