python -mjson.tool 명령에서 필터 조건 사용

python -mjson.tool 명령에서 필터 조건 사용

python -mjson.tool 명령에서 필터 기준을 사용하여 특정 속성이 있는 개체를 선택할 수 있습니까?

예를 들어, 두 개의 개체가 포함된 example.json 파일이 있는데 그 중 두 개에는 "test": "pi" 속성이 있습니다. 이 두 개체만 구하면 됩니다.

답변1

정보를 올바르게 추출하려면 중첩된 데이터 구조(예: JSON)를 관련 도구(예: 여기서는 json 인식)로 구문 분석해야 합니다. 행 인식 루틴(예: grep/sed/awk/etc.)만 사용하여 중첩된 데이터 구조를 조작하려고 하면 실패 및 거짓 긍정이 발생합니다. 예를 들어 위의 답변은 JSON이 멋지게 인쇄되고 각 JSON 요소가 한 줄에 하나씩 있는 경우에만 작동합니다. JSON이 다르게 인쇄되면(즉, 한 줄에 또는 같은 줄에 여러 요소가 있는 경우) 실패합니다.

따라서 Python을 사용하는 경우 개체를 구문 분석한 다음 프로그래밍 방식으로 필요한 데이터를 추출해야 합니다(예: Python으로 스크립트 작성).

그러나 또 다른 방법이 있습니다. Unix의 경우 jq, jtc(및 기타 여러 가지)와 같이 사용자와 같은 요구 사항을 쉽게 구현할 수 있는 개발된 유틸리티 또는 json 인식 유틸리티가 있습니다. 아래에서 해결방법을 보여드리겠습니다JTC:

다음과 같은 JSON이 있다고 가정해 보겠습니다.

bash $ cat file.json 
{
   "Root": [
      {
         "data": "2.71",
         "test": "e"
      },
      {
         "data": "3.14",
         "test": "pi"
      }
   ]
}
bash $ 

그런 다음 포함된 모든 객체를 추출하려면 다음과 같이 "test": "pi"사용하십시오 .jtc

bash $ cat file.json | jtc -w'[test]:<pi>: [-1]'
{
   "data": "3.14",
   "test": "pi"
}
bash $ 

walk-path( ) 매개변수 -w에 대한 설명 :

1. [test]:<pi>:유사한 요소가 모두 검색됩니다 "test": "pi"(두 개 이상인 경우).

2. [-1]발견된 요소에서 JSON 레벨 1개 위로 올라갑니다.

산책 결과를 인쇄합니다.

여기에서 jtc전체 사용자 가이드를 확인하세요.https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.md

답변2

나는 대답이 '아니요'라고 믿습니다. 저는 Python 전문가는 아니지만 코드를 살펴보았습니다. 이 도구에 대한 옵션이 표시되지 않습니다.
최근에 같은 문제가 있어서 방금 파이프를 쳤어요grep내가 찾고 있는 것. grep을 사용하면 일치하는 줄 앞이나 뒤의 줄을 볼 수 있으므로 전체 절을 볼 수 있습니다.
... | pythom -m json.tool | grep -E -B 3 -A 5 'test.*:.*pi'
그러면 "test" [something] : [something] pi가 포함된 줄 앞 3줄, 뒤 5줄이 표시됩니다.

관련 정보