python获取json所有节点和子节点

使用python获取json的所有父结点和子节点 并使用父节点加下划线命名子节点

先展示一段json代码

{
    "level1": {
      "level2": {
        "level3": [
          {
            "level4": "4value"
          },
          {
            "level4_2": "4_2value"
          }
        ]
      },
      "level2_2": "2_2value",
      "level2_3": "2_3value"
    },
    "level1_2": [
      {
        "level2_4": "2_4value",
        "level2_5": "2_5value"
      },
      {
        "level3_2": "3_2value"
      }
    ]
}

上面就是这次测试的json数据 因为时间问题只写了最多4层结构
按照解析下来应该是 相应的节点为父节点、父节点+‘_’+子节点
直接上代码

import json

  
class returnJsonNode():
    def __init__(self):
        self.datas = {}


    def ergodic_data(self, data: dict, result=""):
        # 检测数据类型:字典类型
        if isinstance(data, dict):
            for k, v in data.items():
                if result == "":
                    self.ergodic_data(v, k)
                else:
                    self.ergodic_data(v, result + '.' + f'{k}')
        # 检测是否为列表或元组
        # 元组和列表类型差不多放到一起处理
        elif isinstance(data, (list, tuple)):
            if len(data) == 1:
                for i in range(len(data)):
                    self.ergodic_data(data[i], result)
            else:
                for i in range(len(data)):
                    self.ergodic_data(data[i], result)
        else:
            self.datas[result] = str(data)
        return list(self.datas.keys())


with open(r'D:\zsh\Program\alls\Lucy\test\test.json') as f:
    datas = f.read()
keys = returnJsonNode().ergodic_data(data=json.loads(datas),result="")
print(keys)

在这里插入图片描述
因为json里面命名是_的 所以我这里用’.'代替的 可以更换成下划线
在这里插入图片描述
运行如下
在这里插入图片描述
有很多可以进行转换 这里因为是直接取出来不加任何其他处理 如果是要和python 进行jsonpath取数 可更换里面参数 如下
在这里插入图片描述
方法有很多 之前那篇文章 函数没有写完 所以导致不能完全取出来 json node,这篇文章
后续我会写成工具 包含分解成有层级的表或者Excel 如果有更好的方法 欢迎提出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# wtpy 这是**WonderTrader**针对`Python3`适配的子框架 # wtpy子框架简介 + apps子模块 > - WtBtAnalyst.py 回测分析模块,主要是利用回测生成的数据,计算各项回测指标,并输出到`excel`文件 > - WtCtaOptimizer `CTA`优化器,主要是利用`multiprocessing`并行回测,并统计各项交易指标,最后将统计结果汇总输出到`csv`文件 > - WtHotPicker 国内期货换月规则辅助模块,支持从交易所网站页面爬取数据确定换月规则,也支持解析`datakit`每日收盘生成的snapshot.csv来确定换月规则 + wrapper子模块 > 该模块主要包含了所有和`C++`底层对接的接口模块 > - ContractLoader.py 主要用于通过`CTP`等接口加载基础的`commodities.json`和`contracts.json`文件 > - WtBtWrapper.py 主要用于和回测引擎`C++`核心模块对接 > - WtDtWrapper.py 主要用于和数据组件`C++`核心模块对接 > - WtDtHelper.py 主要提供将用户自己的数据和`WonderTrader`内部数据格式进行转换的功能 > - WtDtServoApi.py 主要向用户提供直接通过`python`访问`datakit`落地的数据的接口 > - WtExecApi.py 主要用于和`C++`独立执行模块`WtExecMon`对接 > - WtWrapper.py 主要用于和实盘交易引擎`C++`核心模块对接 > - WtMQWrapper.py 主要提供直接使用底层WtMsgQue模块的对接 > - WtDtHelper.py 主要用于和底层的`WtDtHelper`数据辅助模块对接 + monitor子模块 > 该模块主要包含了内置的监控服务,提供了`Http`和`websocket`两种连接方式 > - DataMgr.py 主要用于读取并缓存组合数据 > - EventReceiver.py 主要用于在指定的`udp`端口接收组合转发的各种事件 > - PushSvr.py 主要用于向`web`提供`websocket`服务 > - WatchDog.py 主要用于自动调度服务端的进程 > - WtBtMon.py 主要进行回测的管理 > - WtMonSvr.py 监控服务核心服务模块 ,利用`flask`实现了一个`http`服务接口 > - static `webui`静态文件 + 其他模块 > 主要位于根节点下,包含了各个子模块的入口组件 > - WtCoreDefs.py 主要定义的`Python`版本的策略基类,方便用户重写 > - CodeHelper.py 品种代码辅助模块,内置了一些方法,方便使用 > - ContractMgr.py 合约管理器模块,用于加载`contracts.json`或`stocks.json`文件,并提供查询方法 > - CtaContext.py 主要定义了`CTA`策略的上下文,可以理解为单策略的运行环境 > - HftContext.py 主要定义了`HFT`策略的上下文,可以理解为单策略的运行环境 > - SelContext.py 主要定义了`SEL`策略的上下文,可以理解为单策略的运行环境 > - ExtToolDefs.py 扩展模块定义文件,主要定义了一些扩展模块的基础接口 > - ProductMgr.py 品种管理器,主要用于`Python`环境中的合约属性、品种属性查询 > - SelContext.py 选股策略上下文,即选股策略直接交互的`API` > - SessionMgr.py 交易时间模板管理器,主要用于`Python`环境中的交易时段模板管理 > - -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vergil_Zsh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值