bash借助python格式化展示json格式的数据

当在bash中直接处理JSON数据时,格式可能不直观。通过结合curl和python的json.tool模块,可以轻松地以格式化的JSON样式展示数据。例如,一个curl命令获取并格式化POST请求的JSON响应,该请求创建了一个新的页面,并提供了详细的内容和设置。

正常清空下,bash无法格式化展示json数据。可借助pythonjson工具(通过管道使用python -mjson.tool),将数据以json格式返回

使用示例:

curl -u user:passward  -X POST -H 'Content-Type: application/json' -d '{"type":"page","title":"new page", "space":{"key":"~t_zhangaj"},"body":{"storage":{"value":
"<p>This is a new page</p>","representation":"storage"}}}' http://10.130.1.65:8090/rest/api/content/ | python -mjson.tool

效果:
在这里插入图片描述

### 如何用Python解析或操作嵌套的两层JSON格式数据 在实际开发中,经常遇到需要解析和处理嵌套结构的数据,比如JSON对象。以下是针对两层嵌套JSON数据的操作方法。 #### 方法一:使用双重`for`循环遍历 对于简单的两层嵌套JSON数据,可以采用两个嵌套的`for`循环来逐一访问内部键值对[^1]。这种方法直观易懂,适合初学者理解嵌套逻辑。 ```python data = { "level1_key1": {"subkey1": "value1", "subkey2": "value2"}, "level1_key2": {"subkey3": "value3", "subkey4": "value4"} } for key, value in data.items(): print(f"Outer Key: {key}") for subkey, subvalue in value.items(): print(f"\tInner Key: {subkey}, Value: {subvalue}") ``` #### 方法二:递归函数遍历 如果希望代码更具扩展性,能够适应更多层次的嵌套,则可以选择递归方式。递归的核心在于判断当前节点是否仍为字典类型并继续深入访问其子节点[^2]。 ```python def recursive_parse(d): if isinstance(d, dict): # 判断是否为字典 for k, v in d.items(): print(f"Key: {k}") recursive_parse(v) # 对于每个值再次调用该函数 elif isinstance(d, list): # 如果是列表则逐项处理 for item in d: recursive_parse(item) else: print(f"Value: {d}") recursive_parse(data) ``` #### 方法三:利用列表生成式简化循环 为了提高效率与可读性,在某些场景下可以通过列表推导式快速提取所需信息而无需显式的多重循环语句[^3]。 假设我们只想获取所有的叶子结点(即最深层级的具体数值),可以用如下代码: ```python leaves = [ (outer_key, inner_key, value) for outer_key, inner_dict in data.items() for inner_key, value in inner_dict.items() ] print(leaves) ``` 此段程序会返回一个元组组成的列表,其中包含了外层键名、内层键名以及对应的值。 #### 使用第三方库——JsonPath 当面对复杂或者深层次嵌套的情况时,手动编写上述任何一种解决方案都可能显得繁琐甚至不可行。此时引入专门用于查询 JSONJsonPath 表达式将会极大地便利我们的工作流程[^4]。它允许开发者像 SQL 查询数据库那样灵活地定位目标字段位置。 安装 `jsonpath-ng` 库: ```bash pip install jsonpath-ng ``` 应用实例: ```python from jsonpath_ng import parse # 定义匹配模式 expr = parse('$.level1_key1.subkey*') match_results = expr.find(data) for match in match_results: print(match.value) ``` 以上介绍了四种不同的策略去应对双层乃至更深程度上的 JSON 结构化数据分析需求。每种都有各自适用范围及优缺点,请依据具体项目背景选取最合适的技术手段实施编码作业。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值