python 读取json文件并遍历
·
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
简化版JSON文件读取工具
快速读取和遍历JSON数据
"""
import os
import sys
import json
def read_json_simple(file_path):
"""简单读取JSON文件"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
return data
except Exception as e:
print(f"读取JSON文件失败: {e}")
return None
def print_json_data(data, indent=0, max_depth=5):
"""打印JSON数据"""
if indent > max_depth:
print(" " * indent + "... (达到最大深度)")
return
if isinstance(data, dict):
for key, value in data.items():
if isinstance(value, (dict, list)):
print(" " * indent + f"{key}: ({type(value).__name__})")
print_json_data(value, indent + 1, max_depth)
else:
value_str = str(value)
if len(value_str) > 100:
value_str = value_str[:100] + "..."
print(" " * indent + f"{key}: {value_str}")
elif isinstance(data, list):
for i, item in enumerate(data):
if isinstance(item, (dict, list)):
print(" " * indent + f"[{i}]: ({type(item).__name__})")
print_json_data(item, indent + 1, max_depth)
else:
value_str = str(item)
if len(value_str) > 100:
value_str = value_str[:100] + "..."
print(" " * indent + f"[{i}]: {value_str}")
else:
value_str = str(data)
if len(value_str) > 100:
value_str = value_str[:100] + "..."
print(" " * indent + value_str)
def count_json_items(data):
"""统计JSON数据项数量"""
if isinstance(data, dict):
return len(data)
elif isinstance(data, list):
return len(data)
else:
return 1
def get_json_keys(data):
"""获取JSON中的所有键"""
keys = set()
if isinstance(data, dict):
for key, value in data.items():
keys.add(key)
if isinstance(value, (dict, list)):
keys.update(get_json_keys(value))
elif isinstance(data, list):
for item in data:
if isinstance(item, (dict, list)):
keys.update(get_json_keys(item))
return list(keys)
def find_values_by_key(data, target_key):
"""根据键名查找所有值"""
results = []
if isinstance(data, dict):
for key, value in data.items():
if key == target_key:
results.append(value)
if isinstance(value, (dict, list)):
results.extend(find_values_by_key(value, target_key))
elif isinstance(data, list):
for item in data:
if isinstance(item, (dict, list)):
results.extend(find_values_by_key(item, target_key))
return results
def main():
"""主函数"""
print("简化版JSON读取工具")
print("=" * 30)
# 查找JSON文件
json_files = [f for f in os.listdir('.') if f.lower().endswith('.json')]
if not json_files:
print("当前目录下没有找到JSON文件")
return
# 使用第一个JSON文件
json_file = json_files[0]
print(f"找到JSON文件: {json_file}")
# 读取JSON文件
data = read_json_simple(json_file)
if data is None:
print("读取失败")
return
print("✓ 文件读取成功")
# 显示基本信息
print(f"\n数据类型: {type(data).__name__}")
if isinstance(data, dict):
print(f"字典键数量: {len(data)}")
print(f"键列表: {list(data.keys())}")
elif isinstance(data, list):
print(f"列表元素数量: {len(data)}")
if data:
print(f"第一个元素类型: {type(data[0]).__name__}")
# 显示所有键
all_keys = get_json_keys(data)
if all_keys:
print(f"\n所有键 ({len(all_keys)} 个):")
for key in sorted(all_keys):
print(f" - {key}")
# 遍历并显示数据
print(f"\n数据内容:")
print("-" * 30)
print_json_data(data)
# 搜索功能
print(f"\n" + "=" * 30)
search_key = input("请输入要搜索的键名 (回车跳过): ").strip()
if search_key:
values = find_values_by_key(data, search_key)
if values:
print(f"\n找到键 '{search_key}' 的 {len(values)} 个值:")
for i, value in enumerate(values[:10]): # 只显示前10个
print(f" {i+1}. {value}")
if len(values) > 10:
print(f" ... 还有 {len(values) - 10} 个值")
else:
print(f"没有找到键 '{search_key}'")
print(f"\n处理完成!")
if __name__ == "__main__":
main()
更多推荐


所有评论(0)