json_processor
json_processor
/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
LEO JSON Processor
import os
import json
import logging
from collections import Counter
class JSONProcessor:
"""Processes JSON files for intent generation."""
def __init__(self):
"""Initialize the JSON processor."""
self.on_progress = lambda p: None
self.on_status = lambda s: None
Args:
file_path (str): Path to the JSON file
Returns:
dict: Processed data
"""
try:
self.on_status(f"Processing JSON file: {os.path.basename(file_path)}")
self.on_progress(10)
# Read file
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
self.on_progress(30)
# Analyze structure
self.on_status("Analyzing JSON structure...")
structure = self._analyze_structure(data)
self.on_progress(50)
self.on_progress(70)
self.on_progress(90)
# Combine results
result = {
'structure': structure,
'keys': keys,
'entities': entities,
'data': data # Include the original data
}
self.on_progress(100)
self.on_status("JSON processing complete")
return result
except Exception as e:
logging.error(f"Error processing JSON file: {str(e)}", exc_info=True)
raise
Args:
data: JSON data
Returns:
dict: Structure information
"""
structure = {
'type': type(data).__name__
}
if isinstance(data, dict):
structure['keys'] = list(data.keys())
structure['num_keys'] = len(data)
structure['nested_types'] = nested_types
return structure
Args:
data: JSON data
prefix (str): Prefix for nested keys
Returns:
list: List of keys
"""
keys = []
if isinstance(data, dict):
for key, value in data.items():
full_key = f"{prefix}.{key}" if prefix else key
keys.append(full_key)
return keys
Args:
data: JSON data
Returns:
dict: Dictionary of potential entities
"""
entities = {}
# Start processing
if isinstance(data, dict):
process_dict(data)
elif isinstance(data, list) and data and isinstance(data[0], dict):
for i, item in enumerate(data[:5]): # Limit to first 5 items
process_dict(item, f"[{i}]")
return entities