Как сделать JSON с настраиваемыми полями - PullRequest
1 голос
/ 21 февраля 2020

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

Поэтому я использую библиотеку запросов для получения информации из API. Получив эти данные, я использую регулярное выражение, чтобы найти все совпадения для определенной c информации из вывода json.

Код, который у меня есть:

for i in data['resources']:
        if 'id' in i and 'name' in i:
            b = i['name'], i['id']
            k = str(b)
            if  re.findall("'Server-Ownership-\w+', \w+", k):
                matchedOwners = re.findall("'Server-Ownership-\w+', \w+", k)[0]
                j = str(matchedOwners)
                print(j)

вывод этого кода дает мне:

'Server-Ownership-A', 100
'Server-Ownership-B', 200
'Server-Ownership-C', 300
'Server-Ownership-D', 400
'Server-Ownership-E', 500
'Server-Ownership-F', 600
'Server-Ownership-G', 700
'Server-Ownership-H', 800

Что я хотел бы сделать, так это как-то ссылаться на каждую строку владения сервером как на свою собственную, чтобы я мог использовать идентификатор в конце, связанный с ним, для выполнения get запрос для каждого сервера. Моя проблема в том, что я не могу определить способ вызова любой из этих данных. Я подумал, может быть, если бы я мог превратить его в json и создать поле «имя» для части «владение сервером», а затем поле «ID» для идентификаторов в конце. Это вообще возможно или есть лучший способ приблизиться к этому?

Любая помощь очень ценится!

Ответы [ 3 ]

1 голос
/ 21 февраля 2020

Вам не нужно помещать значения в строку, а затем использовать регулярное выражение. Просто протестируйте i['name'] напрямую и используйте его в качестве ключа словаря.

server_owners = {}
for i in data['resources']:
    if 'id' in i and 'name' in i and i['name'].startswith('Server-Ownership-'):
        server_name = i['name'].split('-')[-1] # get A from Server-Ownership-A
        server_owners[server_name] = i['id']

Это создаст запрос типа

{'A': 100, 'B': 200, 'C': 300, ...}
1 голос
/ 21 февраля 2020

Если вы не хотите менять то, что написали до сих пор. Я изменил его, чтобы вы могли иметь словарь для владельцев серверов. Как вы и просили, все в matchedOwners будет добавлено в словарь.

server_owners_dict=dict()

for i in data['resources']:
    if 'id' in i and 'name' in i:
        b = i['name'], i['id']
        k = str(b)
        if  re.findall("'Server-Ownership-\w+', \w+", k):
            matchedOwners = re.findall("'Server-Ownership-\w+', \w+", k)[0]
            j = str(matchedOwners).strip().split() # get rid of whitespace and split by comma
            server_owners_dict[j[0].replace('Server-Ownership-','')]=j[1]
1 голос
/ 21 февраля 2020

Вы можете сохранить их как словарь и получить значение, вызвав ключи.

server_owners_dict = {'Server-Ownership-A': 100,
'Server-Ownership-B': 200,
'Server-Ownership-C': 300,
'Server-Ownership-D': 400,
'Server-Ownership-E': 500,
'Server-Ownership-F': 600,
'Server-Ownership-G': 700,
'Server-Ownership-H': 800}


print(server_owners_dict['Server-Ownership-E'])
500

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

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