파이썬 파일에서 이것을 가장 쉽게 만드는 방법은 무엇입니까? PrettyPrint는 파일이 될 수 있다고 생각되는 "객체"를 사용하지만 파일을 전달하는 방법을 모르겠습니다. 파일 이름만으로는 작동하지 않습니다.
<your_file.js python -mjson.tool
@ed의 링크에서와 같이 왜 그렇지 않습니까?
파이썬 파일에서 이것을 가장 쉽게 만드는 방법은 무엇입니까? PrettyPrint는 파일이 될 수 있다고 생각되는 "객체"를 사용하지만 파일을 전달하는 방법을 모르겠습니다. 파일 이름만으로는 작동하지 않습니다.
<your_file.js python -mjson.tool
@ed의 링크에서와 같이 왜 그렇지 않습니까?
답변:
이 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)
print json.dumps(your_json_string, indent=4)
print(json.dumps(json.loads(your_json_string), indent=2))
그렇지 않으면 그것은 단지 나에게 이스케이프 문자열을 보여 주었다
명령 행에서이를 수행 할 수 있습니다.
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
.
jq '' < some.json
python3 -m json.tool <IN >OUT
JSON dicts에서 필드의 원래 순서를 유지하므로을 사용하는 것이 좋습니다 . 파이썬 인터프리터 버전 2는 필드를 알파벳순으로 오름차순으로 정렬합니다.
내장 모듈 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와 결합합니다.
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
피그먼트 설치 지침은 위의 링크를 참조하십시오.
이 데모는 아래 이미지에 있습니다.
-g
실제로 작동하지 않습니다.) 입력은 stdin에서 가져 오기 때문에 pygmentize는 좋은 추측을 할 수 없습니다. lexer를 명시 적으로 지정해야합니다.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에 배치하고 몇 가지 버그를 수정하고 몇 가지 다른 수정 작업을 수행했습니다.
pprint 사용 : https://docs.python.org/3.6/library/pprint.html
import pprint
pprint.pprint(json)
print()
에 비해 pprint.pprint()
print(json)
{'feed': {'title': 'W3Schools Home Page', 'title_detail': {'type': 'text/plain', 'language': None, 'base': '', 'value': 'W3Schools Home Page'}, 'links': [{'rel': 'alternate', 'type': 'text/html', 'href': 'https://www.w3schools.com'}], 'link': 'https://www.w3schools.com', 'subtitle': 'Free web building tutorials', 'subtitle_detail': {'type': 'text/html', 'language': None, 'base': '', 'value': 'Free web building tutorials'}}, 'entries': [], 'bozo': 0, 'encoding': 'utf-8', 'version': 'rss20', 'namespaces': {}}
pprint.pprint(json)
{'bozo': 0,
'encoding': 'utf-8',
'entries': [],
'feed': {'link': 'https://www.w3schools.com',
'links': [{'href': 'https://www.w3schools.com',
'rel': 'alternate',
'type': 'text/html'}],
'subtitle': 'Free web building tutorials',
'subtitle_detail': {'base': '',
'language': None,
'type': 'text/html',
'value': 'Free web building tutorials'},
'title': 'W3Schools Home Page',
'title_detail': {'base': '',
'language': None,
'type': 'text/plain',
'value': 'W3Schools Home Page'}},
'namespaces': {},
'version': 'rss20'}
pprint
유효한 JSON 문서를 생성하지 않습니다.
다음은 JSON을 컴퓨터에 로컬 파일로 사용하지 않고도 Python에서 JSON을 콘솔에 깔끔하게 인쇄하는 간단한 예입니다.
import pprint
import json
from urllib.request import urlopen # (Only used to get this example)
# Getting a JSON example for this example
r = urlopen("https://mdn.github.io/fetch-examples/fetch-json/products.json")
text = r.read()
# To print it
pprint.pprint(json.loads(text))
def saveJson(date,fileToSave):
with open(fileToSave, 'w+') as fileToSave:
json.dump(date, fileToSave, ensure_ascii=True, indent=4, sort_keys=True)
파일을 표시하거나 저장합니다.
pprintjson 시도 할 수 있습니다.
$ pip3 install pprintjson
pprintjson CLI를 사용하여 파일에서 JSON을 인쇄하십시오.
$ pprintjson "./path/to/file.json"
pprintjson CLI를 사용하여 stdin에서 JSON을 인쇄하십시오.
$ echo '{ "a": 1, "b": "string", "c": true }' | pprintjson
pprintjson CLI를 사용하여 문자열에서 JSON을 인쇄하십시오.
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }'
들여 쓰기가 1 인 문자열에서 JSON을 인쇄하십시오.
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -i 1
문자열에서 JSON을 인쇄하고 출력을 파일 output.json에 저장하십시오.
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -o ./output.json
완벽하지는 않지만 일을합니다.
data = data.replace(',"',',\n"')
당신은 그것을 개선하고 들여 쓰기 등을 추가 할 수 있지만 더 깨끗한 JSON을 읽으려면이 방법입니다.
json.loads()
결과 사전을 사용하여 JSON을 구문 분석 하고 예쁘게 인쇄하십시오. 또는 에 대한 Python 문서 의 Pretty printing 섹션으로 건너 뛰십시오 .json