JSON Transformer
Transform JSON data using mapping rules and transformations
Description
A utility for transforming JSON data structures using mapping rules. Supports field renaming, value transformation, nested object handling, and conditional transformations.
Features
- Field mapping and renaming
- Value transformations
- Nested object handling
- Conditional transformations
Code
import jsonfrom typing import Dict, Any, Callable, Optionalclass JSONTransformer: def __init__(self, mappings: Dict[str, str] = None, transformers: Dict[str, Callable] = None): self.mappings = mappings or {} self.transformers = transformers or {} def transform(self, data: Dict[str, Any]) -> Dict[str, Any]: """Transform data according to mappings and transformers.""" result = {} for key, value in data.items(): # Apply field mapping new_key = self.mappings.get(key, key) # Apply value transformer if exists if new_key in self.transformers: value = self.transformers[new_key](value) elif key in self.transformers: value = self.transformers[key](value) # Handle nested objects if isinstance(value, dict): value = self.transform(value) elif isinstance(value, list): value = [self.transform(item) if isinstance(item, dict) else item for item in value] result[new_key] = value return result def transform_from_json(self, json_str: str) -> Dict[str, Any]: """Transform from JSON string.""" data = json.loads(json_str) return self.transform(data) def transform_to_json(self, data: Dict[str, Any]) -> str: """Transform and return as JSON string.""" transformed = self.transform(data) return json.dumps(transformed, indent=2)
from json_transformer import JSONTransformerimport jsonmappings = {"firstName": "first_name", "lastName": "last_name"}transformers = { 'age': lambda x: x + 1, 'name': str.upper}transformer = JSONTransformer(mappings=mappings, transformers=transformers)data = {"age": 30, "lastName": "Doe", "firstName": "John"}transformed = transformer.transform(data)print(json.dumps(transformed, indent=2))
Comments
No comments yet. Be the first to comment!
Please login to leave a comment.