웹사이트 검색

Python JSONPath 예제


JSONPath란 무엇입니까?

JSONPath는 JSON 데이터를 구문 분석하는 표현 언어입니다. XML 데이터를 구문 분석하는 XPath 표현 언어와 매우 유사합니다. 아이디어는 JSON 데이터를 구문 분석하고 원하는 값을 얻는 것입니다. 전체 JSON 데이터를 읽을 필요가 없기 때문에 메모리 효율성이 더 높습니다.

파이썬 JSONPath 라이브러리

Python에는 많은 JSONPath 라이브러리가 있습니다.

  1. jsonpath: Perl의 포트이며 JSONPath의 JavaScript 버전입니다.
  2. jsonpath-rw-ext 모듈은 기능을 확장하기 위해 몇 가지 추가 확장을 제공합니다.
  3. jsonpath-ng: 산술 및 이진 비교 연산자를 포함하여 표준 준수를 목표로 하는 JSONPath의 최종 구현입니다. 이 라이브러리는 jsonpath-rw 및 jsonpath-rw-ext 모듈을 병합하고 이를 더욱 향상시킵니다.

사용할 Python JSONPath 라이브러리는 무엇입니까?

jsonpath-ng 모듈은 가장 포괄적이며 순수하게 Python으로 작성되었습니다. Python 2와 Python 3을 모두 지원합니다. 따라서 Python JSONPath 예제에 이 모듈을 사용합니다.

jsonpath-ng 모듈 설치

PIP를 사용하여 jsonpath-ng 모듈을 설치할 수 있습니다.

$ pip3.7 install jsonpath-ng

JSONPath를 사용하여 단순 JSON 데이터 구문 분석

JSON 데이터를 구문 분석하고 필요한 속성 값을 가져오는 간단한 예를 살펴보겠습니다.

import json

from jsonpath_ng import jsonpath, parse

json_string = '{"id":1, "name":"Pankaj"}'
json_data = json.loads(json_string)

jsonpath_expression = parse('$.id')

match = jsonpath_expression.find(json_data)

print(match)
print("id value is", match[0].value)

산출:

[DatumInContext(value=1, path=Fields('id'), context=DatumInContext(value={'id': 1, 'name': 'Pankaj'}, path=Root(), context=None))]
id value is 1

우리는 사전을 사용하고 있습니다.

JSONPath 표현식을 사용하여 목록 구문 분석

JSON 키는 값 목록을 포함할 수 있습니다. JSONPath 표현식을 사용하여 목록을 구문 분석하고 값 목록을 가져올 수 있습니다. 다음 내용을 포함하는 JSON 파일 "db.json\이 있다고 가정해 보겠습니다.

{
  "employees": [
    {
      "id": 1,
      "name": "Pankaj",
      "salary": "10000"
    },
    {
      "name": "David",
      "salary": "5000",
      "id": 2
    }
  ]
}

이 JSON 파일을 구문 분석하고 직원 ID 목록을 가져오려고 합니다. JSONPath 표현식을 사용하여 이 데이터를 매우 쉽게 얻을 수 있습니다.

import json
from jsonpath_ng import jsonpath, parse

with open("db.json", 'r') as json_file:
    json_data = json.load(json_file)

print(json_data)

jsonpath_expression = parse('employees[*].id')

for match in jsonpath_expression.find(json_data):
    print(f'Employee id: {match.value}')

산출:

{'employees': [{'id': 1, 'name': 'Pankaj', 'salary': '10000'}, {'name': 'David', 'salary': '5000', 'id': 2}]}
Employee id: 1
Employee id: 2

추천 읽기: Python f-strings – PEP 498 – Literal String Interpolation

데이터를 목록으로 가져오려면 Python 목록 이해를 사용할 수 있습니다.

emp_ids_list = [match.value for match in jsonpath_expression.find(json_data)]
print(emp_ids_list)  # [1, 2]

결론

JSONPath는 JSON 데이터를 구문 분석하고 특정 값을 추출하는 쉬운 방법을 제공합니다. JSON 데이터가 방대하고 소수의 값에만 관심이 있을 때 매우 유용합니다.

참조

  • jsonpath.com: JSONPath 표현식 유효성 테스트
  • jsonlint.com: JSON 데이터 확인