[python] JSON 파일을 인쇄하는 방법?

파이썬 파일에서 이것을 가장 쉽게 만드는 방법은 무엇입니까? PrettyPrint는 파일이 될 수 있다고 생각되는 “객체”를 사용하지만 파일을 전달하는 방법을 모르겠습니다. 파일 이름만으로는 작동하지 않습니다.



답변

json모듈은 이미 indent매개 변수를 사용하여 기본적인 예쁜 인쇄를 구현합니다 .

>>> import json
>>>
>>> your_json = '["foo", {"bar":["baz", null, 1.0, 2]}]'
>>> parsed = json.loads(your_json)
>>> print(json.dumps(parsed, indent=4, sort_keys=True))
[
    "foo",
    {
        "bar": [
            "baz",
            null,
            1.0,
            2
        ]
    }
]

파일을 파싱하려면 다음을 사용하십시오 json.load().

with open('filename.txt', 'r') as handle:
    parsed = json.load(handle)


답변

명령 행에서이를 수행 할 수 있습니다.

python3 -m json.tool some.json

(python3 제안을위한 @ Kai Petzke 덕분에 질문에 대한 주석에서 이미 언급했듯이).

실제로 파이썬은 명령 줄의 json 처리와 관련하여 내가 가장 좋아하는 도구가 아닙니다. 간단한 예쁜 인쇄는 괜찮지 만 json을 조작하려면 지나치게 복잡해질 수 있습니다. 곧 별도의 스크립트 파일을 작성해야합니다. 키가 u “some-key”(python unicode) 인 맵으로 끝날 수 있습니다. 이로 인해 필드를 선택하기가 더 어려워지고 실제로는 예쁜 방향으로 가지 않습니다. -인쇄.

jq를 사용할 수도 있습니다 .

jq . some.json

그리고 당신은 보너스로 색상을 얻습니다 (그리고 더 쉬운 확장 성).

부록 : jq를 사용하여 큰 JSON 파일을 처리하고 다른 한편으로는 매우 큰 jq 프로그램을 사용하는 것에 대해서는 약간의 혼동이 있습니다. 하나의 큰 JSON 엔터티로 구성된 파일을 예쁘게 인쇄하려면 실제 제한이 RAM입니다. 단일 실제 데이터 배열로 구성된 2GB 파일을 예쁘게 인쇄하는 경우 예쁘게 인쇄하는 데 필요한 “최대 상주 세트 크기”는 5GB (jq 1.5 또는 1.6을 사용하는지 여부)입니다. jq는 python 이후에서 사용할 수 있습니다 pip install jq.


답변

내장 모듈 pprint (https://docs.python.org/3.6/library/pprint.html)를 사용할 수 있습니다 .

json 데이터로 파일을 읽고 인쇄하는 방법

import json
import pprint

json_data = None
with open('filename.txt', 'r') as f:
    data = f.read()
    json_data = json.loads(data)

pprint.pprint(json_data)


답변

Pygmentize + Python json.tool = 구문 강조를 사용한 예쁜 인쇄

Pygmentize는 살인자 도구입니다. 이것 좀 봐.

python json.tool을 pygmentize와 결합합니다.

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json

피그먼트 설치 지침은 위의 링크를 참조하십시오.

이 데모는 아래 이미지에 있습니다.

데모


답변

이 기능을 사용하여 JSON 인 경우 기억할 필요 걱정하지 않는다 str또는 dict다시 – 예쁜 인쇄에 단지 모양 :

import json

def pp_json(json_thing, sort=True, indents=4):
    if type(json_thing) is str:
        print(json.dumps(json.loads(json_thing), sort_keys=sort, indent=indents))
    else:
        print(json.dumps(json_thing, sort_keys=sort, indent=indents))
    return None

pp_json(your_json_string_or_dict)


답변

한때 prettyjson()멋진 출력을 생성 하는 함수를 작성했습니다 . 이 저장소 에서 구현을 가져올 수 있습니다 .

이 기능의 주요 기능은 특정 항목에 maxlinelength도달 할 때까지 한 줄에 dict 및 list 항목을 유지하려고 시도하는 것 입니다. 이렇게하면 JSON 줄이 줄어들고 출력이 더 작고 읽기 쉽습니다.

예를 들어 다음과 같은 종류의 출력을 생성 할 수 있습니다.

{
  "grid": {"port": "COM5"},
  "policy": {
    "movingaverage": 5,
    "hysteresis": 5,
    "fan1": {
      "name": "CPU",
      "signal": "cpu",
      "mode": "auto",
      "speed": 100,
      "curve": [[0, 75], [50, 75], [75, 100]]
    }
}

UPD Dec’19 : 코드를 별도의 repo에 배치하고 몇 가지 버그를 수정하고 몇 가지 다른 수정 작업을 수행했습니다.


답변

명령 행에서 예쁘게 인쇄하고 들여 쓰기 등을 제어 할 수 있으려면 다음과 유사한 별명을 설정할 수 있습니다.

alias jsonpp="python -c 'import sys, json; print json.dumps(json.load(sys.stdin), sort_keys=True, indent=2)'"

그런 다음 다음 방법 중 하나로 별칭을 사용하십시오.

cat myfile.json | jsonpp
jsonpp < myfile.json