哪种方法用于从json这样的输出中过滤出数据

时间:2019-05-07 09:51:36

标签: python json regex list

我们的一个系统为我提供了如下数据:

[
    {
        "count": 1,
        "headings": [
            "name",
            "Hosts"
        ],
        "kind": "ApplicationInstance",
        "offset": 0,
        "results": [
            [
                "demo",
                [
                    "hostname2.domain.com",
                    "hostname3.domain.com",
                    "hostname4.domain.com",
                    "hostname1",
                    "hostname5",
                    "hostname7"
                ]
            ]
        ]
    }
]

此数据是python脚本中cURL命令的结果。

现在,我正在尝试找出最好的方法来获取所有属于“演示”的主机(包括主机名,如果有的话,包括其域名)。

赞:

hostname2.domain.com
hostname3.domain.com
hostname4.domain.com
hostname1
hostname5
hostnam8

到目前为止,我无法使用grep或regex取得成功,但是我相当有信心我没有以正确的方式使用它。

因此,我正在寻找您的指导,以寻求最佳解决方案。您的任何指针都很棒。

2 个答案:

答案 0 :(得分:1)

我不太确定JSON的可能值是什么,但这是一种适用于已发布字典的解决方案:

import requests
hosts = []
resp = requests.get("URL") # if you want to get it from URL
for elem in resp.json(): 
    list_of_results = elem["results"] 
    for result in list_of_results: 
         if result[0] == "demo": 
             hosts.extends(result[1])


print(hosts)                                                                                                                                                                                                
# => ['hostname2.domain.com', 'hostname3.domain.com', 'hostname4.domain.com', 'hostname1', 'hostname5', 'hostname7']

如果您要为发布的JSON寻找解决方案 just ,则应使用requests.get,而不要使用json.loads

import json

for elem in json.loads("JSON_STRING"):
    # same code

答案 1 :(得分:1)

您可以使用json模块,甚至可以使用字符串功能。

带有json模块:

import json
with open('test.json') as json_f:
    data = json.load(json_f)
    for p in data:
        results = p['results']
        results = ((results[0])[1])

for res in results:
    print(res)