Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用自定义字段生成JSON_Python_Json_Regex_Request - Fatal编程技术网

Python 如何使用自定义字段生成JSON

Python 如何使用自定义字段生成JSON,python,json,regex,request,Python,Json,Regex,Request,我不太确定这是否可能,因为我无法找到任何关于它的确切信息。我将尽力在下面解释我想做什么 因此,我使用请求库从API中提取信息。一旦有了这些数据,我就使用正则表达式从json输出中查找特定信息段的所有匹配项 我的密码是: for i in data['resources']: if 'id' in i and 'name' in i: b = i['name'], i['id'] k = str(b) if

我不太确定这是否可能,因为我无法找到任何关于它的确切信息。我将尽力在下面解释我想做什么

因此,我使用请求库从API中提取信息。一旦有了这些数据,我就使用正则表达式从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
我想做的是以某种方式将每个服务器所有权行引用为自己的,这样我就可以使用与之相关联的末尾的ID为每个服务器执行get请求。我的问题是,我无法确定调用这些数据的方法。我想也许我可以把它转换成json,为“服务器所有权”部分创建一个“名称”字段,然后在最后为id创建一个“id”字段。这是可能的还是有更好的方法


非常感谢您的帮助

您可以将它们保存为字典,并通过调用键获取值

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

将打印更改为函数并返回要在请求中使用的id。

您可以将其保存为字典,并通过调用键获取值

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

将打印更改为函数并返回要在请求中使用的id。

不需要将值放入字符串中,然后使用正则表达式。直接测试
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']
这将创建一个类似dict的

{'A': 100, 'B': 200, 'C': 300, ...}

您不需要将值放入字符串中,然后使用正则表达式。直接测试
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']
这将创建一个类似dict的

{'A': 100, 'B': 200, 'C': 300, ...}

如果你不想改变到目前为止你写的东西。我对其进行了修改,以便为服务器所有者提供字典。按照您的要求,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]

如果你不想改变到目前为止你写的东西。我对其进行了修改,以便为服务器所有者提供字典。按照您的要求,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]


为什么要使用regexp而不是直接访问字典键?
如果我['name'].startswith('Server-Ownership-'):
@barmar我在最初的get请求中就是这么做的。在for循环开始的地方,我引用id键和name键。我需要正则表达式,因为我返回了很多我不需要的数据。因此,通过使用正则表达式,我只能显示我所需要的“服务器所有权”。此外,id键和name键不在一起,因此我需要它们并排排列在相应的服务器上。为什么要使用regexp而不是直接访问字典键呢?
如果我['name'].startswith('Server-Ownership-'):
@barmar我在最初的get请求中就是这样做的。在for循环开始的地方,我引用id键和name键。我需要正则表达式,因为我返回了很多我不需要的数据。因此,通过使用正则表达式,我只能显示我所需要的“服务器所有权”。此外,id键和名称键不在一起,因此我需要它们并排排列以用于相应的服务器。我可以设置脚本以自动将匹配的所有者中找到的内容编入字典吗?此外,这些服务器名称可以更改,我尝试不将它们硬编码到脚本中,以防它们在将来更改。它们总是以“服务器所有权-”开始。我可以设置脚本自动将匹配所有者中的任何内容编入字典吗?此外,这些服务器名称可以更改,我正在尝试不将它们硬编码到脚本中,以防它们在将来更改。它们总是以“服务器所有权-”开始,服务器所有者={}将使其成为一个集合。你需要使用dict()。我的错!使用{}更快:服务器{u所有者={}将使其成为一个集合。你需要使用dict()。我的错!使用{}更快:现在这些服务器所有者可以更改。它们将始终以“服务器所有权-”开头。有没有什么方法可以像for循环一样自动检测名称,然后打印id?我的最终目标是将这些信息放入excel。例如服务器所有者名称,然后是id。您可以很容易地替换掉“服务器所有权-”部分,就像我刚刚编辑到我的解决方案中一样。对于所有问题,我很抱歉,我只是想更好地了解这一点,以扩展我的知识。最后一行是如何自动检测名字的?不用担心!由于您解释了服务器所有者总是以“服务器所有权-”开头,因此我们首先会像您一样查找与“服务器所有权-”匹配的所有者,然后在制作字典时删除“服务器所有权-”部分,只留下名称。那么,如何使用与每个名称相关联的id一个接一个地自动引用每个名称来执行get请求呢?脚本的目标是运行它并让它自己完成所有事情。现在这些服务器所有者可以更改。它们将始终以“服务器所有权-”开头。有没有什么方法可以像for循环一样自动检测名称,然后打印id?我的最终目标是将这些信息放入excel。例如服务器所有者名称,然后是id。您可以很容易地替换掉“服务器所有权-”部分,就像我刚刚编辑到我的解决方案中一样。对于所有问题,我很抱歉,我只是想更好地了解这一点,以扩展我的知识。最后一行是如何自动检测名字的?不用担心!由于您解释了服务器所有者总是以“服务器所有权-”开头,因此我们首先会像您一样查找与“服务器所有权-”匹配的所有者,然后在制作字典时删除“服务器所有权-”部分,只留下名称。那么,如何使用与每个名称相关联的id一个接一个地自动引用每个名称来执行get请求呢?脚本的目标是运行它并让它自己完成所有事情。