Прочитать файл json, используя python - PullRequest
0 голосов
/ 06 февраля 2019

Команда, мой код работает с dict в комментариях ниже.Теперь я хочу переместить это в file.json и читать оттуда, сохраняя логику.какие-либо советы, как я могу представить свой раздел комментариев ниже в json и прочитать его обратно в словарь?

преобразовать словарь python в файл json и прочитать в python

'''
source_cidr_name = {
    'location1' : ("1.1.1.1/32", [22, 443]),
    'location2' : ("2.2.2.2/32", [443])}
'''
source_cidr_name = {}
    with open('/Users/code/dev/whitelist.json') as jf:
    source_cidr_name = json.load(jf)

file.json выглядит ниже, но яне знаю, как представить мои порты 22 и 443 {"source_cidr_whitelist": {"key1": {"ip_subnet": "1.1.1.1/32"}, "key2": {"ip_subnet": "2.2.2.2/32" ]}}}

1 Ответ

0 голосов
/ 06 февраля 2019

JSON т.е. JavaScript Object Notaion не поддерживает включение одинарных кавычек ' вокруг строк и ( или ) списков / массивов arounf при использовании json.loads() для преобразования строкового представления в объект (словарь).

Использование json.dumps() нормально с кортежами / списками, одинарными / двойными кавычками и т. Д., Поскольку Python внутренне преобразует их в правильный допустимый JSON.Значит, он преобразует ( ), используемый для представления / окружения кортежей, в [ ] и ', используемый для представления / окружения строк, в ".

Мое предложениечтобы избавиться от проблем такого рода

При выгрузке / записи данных в файл JSON используйте json.dumps() для создания строки из существующих объектов Python, таких как список / словарь (конвертируемый JSON).

После этого, если вы будете читать то же самое в любой момент времени позже, оно будет легко преобразовано в реальный список / словарь объектов Python и т. Д. С использованием json.loads() из строк или с использованием json.load() из файловоподобных объектов.

Пример, который помог выяснить

>>> import json
>>> 
>>> d = {
...     'location1' : ("1.1.1.1/32", [22, 443]),
...     'location2' : ("2.2.2.2/32", [443])}
>>> 
>>> s = json.dumps(d, indent=4)
>>> print(s)
{
    "location2": [
        "2.2.2.2/32", 
        [
            443
        ]
    ], 
    "location1": [
        "1.1.1.1/32", 
        [
            22, 
            443
        ]
    ]
}
>>> 
>>> new_d = json.loads(s)
>>>
>>> new_d
{u'location2': [u'2.2.2.2/32', [443]], u'location1': [u'1.1.1.1/32', [22, 443]]}
>>> 
>>> new_d['location2']
[u'2.2.2.2/32', [443]]
>>> 
>>> new_d['location1']
[u'1.1.1.1/32', [22, 443]]
>>> 
>>> new_d['location1'][0]
u'1.1.1.1/32'
>>> new_d['location1'][1]
[22, 443]
>>> 
>>> new_d['location1'][1][0]
22
>>> new_d['location1'][1][1]
443
>>> 
>>> # NEW (start from string)
... 
>>> s = '''{
...     'location1' : ("1.1.1.1/32", [22, 443]),
...     'location2' : ("2.2.2.2/32", [443])}'''
>>> print(s)
{
    'location1' : ("1.1.1.1/32", [22, 443]),
    'location2' : ("2.2.2.2/32", [443])}
>>> 

1-я попытка

>>> s = '''{'location1' : ["1.1.1.1/32", [22, 443]],'location2' : ["2.2.2.2/32", [443]]}'''
>>> s
'{\'location1\' : ["1.1.1.1/32", [22, 443]],\'location2\' : ["2.2.2.2/32", [443]]}'
>>> 
>>> print(s)
{'location1' : ["1.1.1.1/32", [22, 443]],'location2' : ["2.2.2.2/32", [443]]}
>>> 
>>> d = json.loads(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
>>> 

2-я попытка

>>> 
>>> s = '''{
...     "location1" : ("1.1.1.1/32", [22, 443]),
...     "location2" : ("2.2.2.2/32", [443])}'''
>>> 
>>> d = json.loads(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
>>> 
>>> 

Наконец

>>> s = '''{
...     "location1" : ["1.1.1.1/32", [22, 443]],
...     "location2" : ["2.2.2.2/32", [443]]}'''
>>> 
>>> d = json.loads(s)
>>> d
{u'location2': [u'2.2.2.2/32', [443]], u'location1': [u'1.1.1.1/32', [22, 443]]}
>>> 
>>> type(d)
<type 'dict'>
>>> 
>>> d['location2']
[u'2.2.2.2/32', [443]]
>>> 
>>> d['location2'][1][0]
443
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...