Как получить это json конкретное c слово из этого массива - PullRequest
0 голосов
/ 10 июля 2020

У меня есть это json, и я хотел бы получить только имя из каждого массива. Как мне записать его в python,

В настоящее время у меня есть li = [item.get (data_new [0] 'id') для элемента в data_new], где data_new - это мои json данные.

   [
    {
        "id": "1687fbfa-8936-4b77-a7bc-123f9f276c49",
        "attributes": [
            {
                "name": "status",
                "value": "rejected",
                "scope": "identity"
            },
            {
                "name": "created_ts",
                "value": "2020-06-25T16:22:07.578Z",
                "scope": "system"
            },
            {
                "name": "updated_ts",
                "value": "2020-07-08T12:43:09.361Z",
                "scope": "system"
            },
            {
                "name": "artifact_name",
                "value": "release-v10",
                "scope": "inventory"
            },
            {
                "name": "device_type",
                "value": "proddemo-device",
                "scope": "inventory"
            },
        ],
        "updated_ts": "2020-07-08T12:43:09.361Z"
    },
    {
        "id": "0bf2a1fe-6004-473f-88b7-aab061972115",
        "attributes": [
            {
                "name": "status",
                "value": "rejected",
                "scope": "identity"
            },
            {
                "name": "created_ts",
                "value": "2020-07-01T16:23:00.631Z",
                "scope": "system"
            },
            {
                "name": "updated_ts",
                "value": "2020-07-08T17:41:16.45Z",
                "scope": "system"
            },
            {
                "name": "artifact_name",
                "value": "Module_logs_v7",
                "scope": "inventory"
            },
            {
                "name": "cpu_model",
                "value": "ARMv8 Processor",
                "scope": "inventory"
            },
            {
                "name": "device_type",
                "value": "device",
                "scope": "inventory"
            },
            {
                "name": "hostname",
                "value": "device004",
                "scope": "inventory"
            },
            {
                "name": "ipv4_br-d6eae8b3a339",
                "value": "172.0.0.1/18",
                "scope": "inventory"
             }
    ],

    "updated_ts": "2020-07-08T12:43:09.361Z"
}
]

Это выходной фрагмент из моего API, и из этого вывода я хочу получить значение устройства с именем hostname, как вы можете видеть, это вторая последняя запись из этого кода, где " name ":" hostname "Итак, я хочу получить значение для этого конкретного json только там, где имя будет" hostname ", как я могу это сделать. Пожалуйста, проведите меня.

1 Ответ

1 голос
/ 10 июля 2020
a = [{'id': '291ae0e5956c69c2267489213df4459d19ed48a806603def19d417d004a4b67e',
  'attributes': [{'name': 'ip_addr',
    'value': '1.2.3.4',
    'descriptionName': 'IP address'},
   {'name': 'ports', 'value': ['8080', '8081'], 'description': 'Open ports'}],
  'updated_ts': '2016-10-03T16:58:51.639Z'},
 {'id': '76f40e5956c699e327489213df4459d1923e1a806603def19d417d004a4a3ef',
  'attributes': [{'name': 'mac',
    'value': '00:01:02:03:04:05',
    'descriptionName': 'MAC address'}],
  'updated_ts': '2016-10-04T18:24:21.432Z'}]

descriptionName = []
    
for i in a:
    for j in i["attributes"]:
        for k in j:
            if k == "descriptionName":
                descriptionName.append(j[k])

Один лайнер:

[j["descriptionName"] for j in i["attributes"] for i in a if "descriptionName" in j  ]

Вывод:

['IP address', 'MAC address']

Обновление 1: Чтобы получить все имена

Один лайнер код -

[j["name"] for j in i["attributes"] for i in a if "name" in j.keys()]

Вывод:

['status',
 'status',
 'created_ts',
 'created_ts',
 'updated_ts',
 'updated_ts',
 'artifact_name',
 'artifact_name',
 'cpu_model',
 'cpu_model',
 'device_type',
 'device_type',
 'hostname',
 'hostname',
 'ipv4_br-d6eae8b3a339',
 'ipv4_br-d6eae8b3a339']

Чтобы получить значение с именем «hostname»

[j["value"] for j in i["attributes"] for i in a if "name" in j.keys() and j["name"] == "hostname"]

Вывод:

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