JSON 구문 분석 및 처리를위한 10 파이썬 1 라이너


저자의 이미지 | 표의 문자
틀 소개
대부분의 응용 프로그램은 데이터 교환, 구성 관리 및 API 통신을 위해 JSON에 크게 의존합니다.
Python의 내장 JSON 모듈은 목록 이해 및 사전 작업과 결합하여 놀랍도록 간결한 코드로 복잡한 JSON 조작을 수행 할 수 있습니다. 이 원 라이너는 JSON 데이터에서 의미있는 정보를 효율적으로 구문 분석, 변환 및 추출하는 데 도움이됩니다.
틀 샘플 데이터 생성
실제 응용 프로그램에서 발생할 일반적인 시나리오를 나타내는 현실적인 JSON 데이터 세트를 작성하겠습니다.
import json
from collections import defaultdict, Counter
# Sample product catalog
products = [
{"id": 1, "name": "Laptop", "price": 999.99, "category": "Electronics", "stock": 25, "rating": 4.5},
{"id": 2, "name": "Coffee Maker", "price": 79.99, "category": "Appliances", "stock": 15, "rating": 4.2},
{"id": 3, "name": "Smartphone", "price": 699.99, "category": "Electronics", "stock": 50, "rating": 4.7},
{"id": 4, "name": "Desk Chair", "price": 159.99, "category": "Furniture", "stock": 8, "rating": 4.1},
{"id": 5, "name": "Headphones", "price": 199.99, "category": "Electronics", "stock": 30, "rating": 4.6}
]
# Sample employee data
employees = [
{"name": "Alice Johnson", "department": "Engineering", "salary": 95000, "projects": ["API", "Database"]},
{"name": "Bob Smith", "department": "Marketing", "salary": 65000, "projects": ["Campaign", "Analytics"]},
{"name": "Carol Davis", "department": "Engineering", "salary": 105000, "projects": ["Frontend", "Testing"]},
{"name": "David Wilson", "department": "Sales", "salary": 75000, "projects": ["Outreach", "CRM"]}
]
# Sample nested API response
api_response = {
"status": "success",
"data": {
"orders": [
{"id": "ORD001", "customer": {"name": "John Doe", "email": "[email protected]"}, "items": [{"product": "Laptop", "quantity": 1}]},
{"id": "ORD002", "customer": {"name": "Jane Smith", "email": "[email protected]"}, "items": [{"product": "Mouse", "quantity": 2}]}
],
"total_orders": 2
}
}
다음의 예에서, 나는 인쇄문을 생략했으며 한 라이너 자체에만 초점을 맞췄습니다.
틀 1. 특정 키에 대한 모든 값 추출
JSON 배열로 작업 할 때는 종종 여러 객체에서 특정 필드의 모든 값을 추출해야합니다. 이 1 라이너는 중첩 구조에서 특정 값을 효율적으로 뽑아 요약 목록을 작성하거나 추가 분석을 위해 데이터를 준비하는 데 적합합니다.
product_names = [item['name'] for item in products]
이 목록은 제품 목록의 각 사전을 통해 반복하고 ‘이름’필드를 추출합니다. 제곱 브래킷 표기법은 키에 직접 액세스하여 원래 순서를 유지하면서 원하는 값 만 포함 된 새 목록을 만듭니다.
['Laptop', 'Coffee Maker', 'Smartphone', 'Desk Chair', 'Headphones']
틀 2. 조건별로 JSON 객체를 필터링합니다
대형 JSON 데이터 세트로 작업 할 때는 데이터 필터링이 필수적입니다. 이 1 라이너는 목록 이해력을 조건부 로직과 결합하여 특정 기준을 충족하는 객체 만 추출하여 복잡한 루프없이 빠른 데이터 서브 세트 생성을 가능하게합니다.
expensive_products = [item for item in products if item['price'] > 200]
조건부 표현식은 각 제품의 가격 분야를 평가하고 조건이 참하는 객체 만 포함합니다.
[{'id': 1,
'name': 'Laptop',
'price': 999.99,
'category': 'Electronics',
'stock': 25,
'rating': 4.5},
{'id': 3,
'name': 'Smartphone',
'price': 699.99,
'category': 'Electronics',
'stock': 50,
'rating': 4.7}]
틀 3. 필드 값별로 JSON 객체를 그룹화합니다
특정 속성별로 데이터를 분류하는 것은 데이터 처리에서 일반적인 요구 사항입니다. 이 1 라이너는 키가 고유 한 필드 값을 나타내는 사전을 만듭니다. 값에는 해당 속성을 공유하는 객체 목록이 포함되어 효율적인 데이터 구성 및 분석이 가능합니다.
products_by_category = {k: [item for item in products if item['category'] == k] for k in set(item['category'] for item in products)}
사전 이해력은 먼저 고유 한 범주 값 세트를 생성 한 다음 각 범주에 대해 일치하는 항목 만 포함하도록 제품 목록을 필터링합니다.
{'Furniture': [{'id': 4,
'name': 'Desk Chair',
'price': 159.99,
'category': 'Furniture',
'stock': 8,
'rating': 4.1}],
'Appliances': [{'id': 2,
'name': 'Coffee Maker',
'price': 79.99,
'category': 'Appliances',
'stock': 15,
'rating': 4.2}],
'Electronics': [{'id': 1,
'name': 'Laptop',
'price': 999.99,
'category': 'Electronics',
'stock': 25,
'rating': 4.5},
{'id': 3,
'name': 'Smartphone',
'price': 699.99,
'category': 'Electronics',
'stock': 50,
'rating': 4.7},
{'id': 5,
'name': 'Headphones',
'price': 199.99,
'category': 'Electronics',
'stock': 30,
'rating': 4.6}]}
틀 4. JSON의 집계 통계 계산
JSON 데이터의 빠른 통계 분석은 추세와 패턴을 식별하는 데 도움이됩니다. 이 1 라이너는 여러 집계 기능을 동시에 계산하여 별도의 계산 루프를 작성하지 않고 데이터 세트의 수치 적 특성에 대한 포괄적 인 통찰력을 제공합니다.
price_stats = {'min': min(item['price'] for item in products), 'max': max(item['price'] for item in products), 'avg': sum(item['price'] for item in products) / len(products)}
사전 이해력은 메모리 효율을 위해 발전기 표현식을 사용하여 동일한 추출 된 값에 다른 집계 함수를 적용합니다.
{'min': 79.99, 'max': 999.99, 'avg': 427.98999999999995}
틀 5. JSON 구조 변환
다른 스키마 또는 API 요구 사항에 맞게 JSON 데이터를 구조 조정하는 것이 종종 필요합니다. 이 1 라이너는 수정 된 필드 이름, 계산 된 값 또는 필터링 된 속성을 갖는 새 개체를 생성하여 다른 시스템 형식간에 완벽한 데이터 변환을 가능하게합니다.
simplified_products = [{'title': item['name'], 'cost': item['price'], 'available': item['stock'] > 0} for item in products]
이 목록 이해력은 변형 된 필드 이름과 계산 된 부울 값을 가진 새로운 사전을 생성합니다. 이 접근법을 사용하면 깨끗하고 읽을 수있는 코드를 유지하면서 단일 표현식으로 필드 이름 바꾸기, 유형 변환 및 계산 된 속성을 허용합니다.
[{'title': 'Laptop', 'cost': 999.99, 'available': True},
{'title': 'Coffee Maker', 'cost': 79.99, 'available': True},
{'title': 'Smartphone', 'cost': 699.99, 'available': True},
{'title': 'Desk Chair', 'cost': 159.99, 'available': True},
{'title': 'Headphones', 'cost': 199.99, 'available': True}]
틀 6. 중첩 값을 안전하게 추출합니다
중첩 된 JSON 데이터를 사용하려면 오류를 피하기 위해 누락 된 키를주의 깊게 처리해야합니다. 이 1 라이너는 기본값이있는 get 메소드를 사용하여 중첩 된 정보를 안전하게 추출하여 불완전하거나 기형 데이터를 처리하는 강력한 코드를 보장합니다.
customer_emails = [order.get('customer', {}).get('email', 'N/A') for order in api_response['data']['orders']]
사슬 .get()
방법은 각 레벨에서 기본값을 제공하여 방지합니다 KeyError
중첩 구조에 액세스 할 때 예외. 이 접근법은 외부 API 또는 필드 존재가 보장되지 않는 사용자 생성 데이터로 작업 할 때 필수적입니다.
틀 7. 필드 값의 발생 계산
데이터 분포 패턴을 이해하려면 데이터 세트에서 특정 값이 얼마나 자주 나타나는지 계산해야합니다. 이 1 라이너는 필드 값의 주파수 맵을 생성하여 데이터 구성에 대한 즉각적인 통찰력을 제공하고 일반적인 패턴 또는 특이 치를 식별하는 데 도움이됩니다.
category_counts = Counter(item['category'] for item in products)
그만큼 Counter
클래스는 발전기 표현식에서 각각의 고유 한 값의 발생을 자동으로 키가 큽니다. 이 접근법은 수동 계산 루프보다 효율적입니다.
Counter({'Electronics': 3, 'Appliances': 1, 'Furniture': 1})
틀 8. 여러 JSON 객체를 병합합니다
마이크로 서비스 또는 연합 시스템으로 작업 할 때 여러 JSON 소스의 데이터를 결합하는 것이 일반적입니다. 이 1 라이너는 키를 일치시켜 객체를 병합하여 다른 소스의 정보를 포함하는 통합 레코드를 만듭니다.
enhanced_products = [{**product, 'total_value': product['price'] * product['stock']} for product in products]
사전 포장 풀기는 기존 필드를 풀고 새로운 계산 된 값을 추가합니다.
[{'id': 1,
'name': 'Laptop',
'price': 999.99,
'category': 'Electronics',
'stock': 25,
'rating': 4.5,
'total_value': 24999.75},
{'id': 2,
'name': 'Coffee Maker',
'price': 79.99,
'category': 'Appliances',
'stock': 15,
'rating': 4.2,
'total_value': 1199.85},
...
{'id': 5,
'name': 'Headphones',
'price': 199.99,
'category': 'Electronics',
'stock': 30,
'rating': 4.6,
'total_value': 5999.700000000001}]
틀 9. 최대/최소값을 가진 개체 찾기
극단적 인 값을 가진 레코드를 식별하는 것은 데이터 분석 및 품질 관리에 필수적입니다. 이 1 라이너는 특정 필드에 대해 최고 또는 가장 낮은 값을 포함하는 객체를 찾아 데이터 세트에서 특이 치, 최고 성능 또는 에지 케이스를 빠르게 식별 할 수 있습니다.
highest_rated = max(products, key=lambda x: x['rating'])
그만큼 max
a key
매개 변수는 지정된 키의 최대 값으로 객체를 반환합니다. 이 접근법은 수동 반복보다 읽기 쉬우 며 문자열과 날짜를 포함하여 비슷한 필드 유형과 함께 작동합니다.
{'id': 3,
'name': 'Smartphone',
'price': 699.99,
'category': 'Electronics',
'stock': 50,
'rating': 4.7}
틀 10. 평평한 중첩 JSON 어레이
복잡한 JSON 구조에는 종종 분석 또는 처리를 위해 평평 해야하는 중첩 어레이가 포함되어 있습니다. 이 1 라이너는 중첩 된 목록의 요소를 추출하고 결합하여 후속 작업에서 작업하기 쉬운 단일 플랫 구조를 만듭니다.
projects_list = [project for employee in employees for project in employee['projects']]
중첩 된 목록 이해력은 먼저 직원을 통해 반복 된 다음 각 직원의 프로젝트 목록을 통해 반복하여 모든 프로젝트 이름의 평평한 배열을 만듭니다. 이 이중 루프 구조는 가변 길이 중첩 어레이를 효율적으로 처리합니다.
['API',
'Database',
'Campaign',
'Analytics',
'Frontend',
'Testing',
'Outreach',
'CRM']
틀 결론
이 Python One-Liners는 JSON 데이터 조작에 Python이 얼마나 유용한지를 보여줍니다.
핵심은 Python의 내장 기능, 이해력 및 사전 작업의 유연성을 이해하는 것입니다.
이를 사용하면 API 응답을 신속하게 처리하고 다른 형식간에 데이터를 변환하며 복잡한 JSON 구조에서 유용한 정보를 추출 할 수 있습니다.
발라 프리 야 c 인도의 개발자이자 기술 작가입니다. 그녀는 수학, 프로그래밍, 데이터 과학 및 컨텐츠 제작의 교차점에서 일하는 것을 좋아합니다. 그녀의 관심 분야와 전문 지식에는 DevOps, 데이터 과학 및 자연어 처리가 포함됩니다. 그녀는 독서, 쓰기, 코딩 및 커피를 즐깁니다! 현재 그녀는 자습서, 방법 안내, 의견 조각 등을 통해 개발자 커뮤니티와 지식을 배우고 공유하는 작업을하고 있습니다. Bala는 또한 매력적인 리소스 개요 및 코딩 자습서를 만듭니다.
Post Comment