Pretty-Печать данных JSON в файл с использованием Python - PullRequest
73 голосов
/ 07 февраля 2012

Проект для класса включает в себя анализ данных JSON в Twitter. Я получаю данные и устанавливаю их в файл без особых проблем, но все это в одну строку. Это хорошо для манипуляций с данными, которые я пытаюсь сделать, но файл нелепо труден для чтения, и я не могу его очень хорошо изучить, что затрудняет написание кода для части манипулирования данными.

Кто-нибудь знает, как это сделать из Python (то есть, не используя инструмент командной строки, который я не могу заставить работать)? Вот мой код:

header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "wb")
# magic happens here to make it pretty-printed
twitterDataFile.write(output)
twitterDataFile.close()

Примечание Я ценю людей, указывающих мне на документацию по простой информации и тому подобное, но, как я уже говорил, я уже посмотрел на это и продолжаю нуждаться в помощи. Действительно полезный ответ будет более подробным и объяснительным, чем примеры, найденные там. Спасибо

Также: Попробуйте это в командной строке Windows:

more twitterData.json | python -mjson.tool > twitterData-pretty.json

результатов в этом:

Invalid control character at: line 1 column 65535 (char 65535)

Я бы дал вам данные, которые я использую, но они очень большие, и вы уже видели код, который я использовал для создания файла.

Ответы [ 6 ]

61 голосов
/ 07 февраля 2012
header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "w")
# magic happens here to make it pretty-printed
twitterDataFile.write(simplejson.dumps(simplejson.loads(output), indent=4, sort_keys=True))
twitterDataFile.close()
53 голосов
/ 07 февраля 2012

Вы можете проанализировать JSON, а затем снова вывести его с такими отступами:

import json
mydata = json.loads(output)
print json.dumps(mydata, indent=4)

См. http://docs.python.org/library/json.html для получения дополнительной информации.

36 голосов
/ 28 января 2018
import json

with open("twitterdata.json", "w") as twitter_data_file:
    json.dump(output, twitter_data_file, indent=4, sort_keys=True)

Вам не нужно json.dumps(), если вы не хотите анализировать строку позже, просто используйте json.dump(). Это тоже быстрее.

13 голосов
/ 07 февраля 2012

Вы можете использовать json модуль python для красивой печати. ​​

>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
{
    "4": 5,
    "6": 7
}

Итак, в вашем случае

>>> print json.dumps(json_output, indent=4)
1 голос
/ 21 февраля 2019

Если у вас уже есть файлы JSON, которые вы хотите отформатировать, вы можете использовать это:

    with open('twitterdata.json', 'r+') as f:
        data = json.load(f)
        f.seek(0)
        json.dump(data, f, indent=4)
        f.truncate()
0 голосов
/ 05 июня 2015

Вы можете перенаправить файл в python и открыть его с помощью инструмента, а для его чтения используйте больше

Пример кода будет,

cat filename.json | python -m json.tool | more
...