Мне нужно создать вывод из JSON, который довольно - PullRequest
0 голосов
/ 01 июля 2019

Я получаю данные из активной директории, экспортирую их в JSON. Замечательно. Затем я могу вернуть вывод через json.loads () .

if output != '':
            return json.loads(output)

Тогда я получаю уродливый вывод json, который нельзя использовать конечному пользователю Могу ли я преобразовать это в словарь Python или есть другой модуль, который может отображать данные в приемлемом для пользователя виде?

Я пытался преобразовать JSON с помощью Python json.decoder

Я получаю следующую ошибку при попытке json.decode:

Ошибка типа: есть не JSON-сериализуемый

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

for server in ADDomainList:
    counter += 1
    psCommand = 'get-ADUser ' + cdsid + ' -Server ' + server + ' -Properties * | 
                 SELECT custom1,custom2,custom3,custom4 | ConvertTo-Json'

    proc = subprocess.Popen(['powershell.exe ', psCommand] 
           stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    output = proc.stdout.read().decode('utf-8')

    if output != '':
       return json.loads(output)
    if counter > 5:
           return 'AD Server Cannot Be Located'

Я получаю:

"custom1": "dummy1",
"custom10": "dummy10",
"custom2": "dummy2",
"custom3": "dummy3",

Я бы хотел вернуться:

Имя поля1: Данные1
Имя поля 10: Данные 10

без кавычек, без разделителей, только факты ...

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Модуль pprint предоставляет возможность «красиво распечатывать» произвольные структуры данных Python в форме, которую можно использовать в качестве ввода для интерпретатора. Вот пример того, как вы можете использовать его для печати объекта JSON.

import json
import pprint
from urllib.request import urlopen
with urlopen('http://pypi.python.org/pypi/configparser/json') as url:
    http_info = url.info()
    raw_data = url.read().decode(http_info.get_content_charset())
project_info = json.loads(raw_data)
result = {'headers': http_info.items(), 'body': project_info}
pprint.pprint(result)

Выход:

{'body': {'info': {'_pypi_hidden': False,
                   '_pypi_ordering': 12,
                   'classifiers': ['Development Status :: 4 - Beta',
                                   'Intended Audience :: Developers',
                                   'License :: OSI Approved :: MIT License',
                                   'Natural Language :: English',
                                   'Operating System :: OS Independent',
                                   'Programming Language :: Python',
                                   'Programming Language :: Python :: 2',
                                   'Programming Language :: Python :: 2.6',
                                   'Programming Language :: Python :: 2.7',
                                   'Topic :: Software Development :: Libraries',
                                   'Topic :: Software Development :: Libraries :: Python Modules'],
                   'download_url': 'UNKNOWN',
                   'home_page': 'http://docs.python.org/py3k/library/configparser.html',
                   'keywords': 'configparser ini parsing conf cfg configuration file',
                   'license': 'MIT',
                   'name': 'configparser',
                   'package_url': 'http://pypi.python.org/pypi/configparser',
                   'platform': 'any',
                   'release_url': 'http://pypi.python.org/pypi/configparser/3.2.0r3',
                   'requires_python': None,
                   'stable_version': None,
                   'summary': 'This library brings the updated configparser from Python 3.2+ to Python 2.6-2.7.',
                   'version': '3.2.0r3'},
        'urls': [{'comment_text': '',
                  'downloads': 47,
                  'filename': 'configparser-3.2.0r3.tar.gz',
                  'has_sig': False,
                  'md5_digest': '8500fd87c61ac0de328fc996fce69b96',
                  'packagetype': 'sdist',
                  'python_version': 'source',
                  'size': 32281,
                  'upload_time': '2011-05-10T16:28:50',
                  'url': 'http://pypi.python.org/packages/source/c/configparser/configparser-3.2.0r3.tar.gz'}]},
'headers': [('Date', 'Sat, 14 May 2011 12:48:52 GMT'),
            ('Server', 'Apache/2.2.16 (Debian)'),
            ('Content-Disposition', 'inline'),
            ('Connection', 'close'),
            ('Transfer-Encoding', 'chunked'),
            ('Content-Type', 'application/json; charset="UTF-8"')]}
0 голосов
/ 01 июля 2019

Модуль json уже реализует некоторую простую красивую печать с параметром indent:

import json

json_ = '["foo", {"bar":["val1", "val2", "val3", "val4"]}]'
parsed = json.loads(json_)
print (json.dumps(parsed, indent=2, sort_keys=True))

выход:

[
  "foo",
  {
    "bar": [
      "val1",
      "val2",
      "val3",
      "val4"
    ]
  }
]

отступ: количество пробелов для отступа (без отступа вы просто получите одну строку)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...