Python - Разобрать комплекс JSON с путями к объектам - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужен файл parse terraform, пишите в формате JSON. Я должен извлечь две данные, resource и id, это пример файла:

    {
      "version": 1,
      "serial": 1,
      "modules": [
        {
          "path": [
            "root"
          ],
          "outputs": {
          },
          "resources": {
            "aws_security_group.vpc-xxxxxxx-test-1": {
              "type": "aws_security_group",
              "primary": {
                "id": "sg-xxxxxxxxxxxxxx",
                "attributes": {
                  "description": "test-1",
                  "name": "test-1"
                }
              }
            },
            "aws_security_group.vpc-xxxxxxx-test-2": {
              "type": "aws_security_group",
              "primary": {
                "id": "sg-yyyyyyyyyyyy",
                "attributes": {
                  "description": "test-2",
                  "name": "test-2"
                }
              }
            }
          }
        }
      ]
    }

Мне нужен экспорт для любого resources, первого ключа и значения id, в данном случае aws_security_group.vpc-xxxxxxx-test-1 sg-xxxxxxxxxxxxxx и aws_security_group.vpc-xxxxxxx-test-2 sg-yyyyyyyyyyyy Я пытался написать это на Python:

#!/usr/bin/python3.6

import json
import objectpath

with open('file.json') as json_file:
    data = json.load(json_file)
    json_tree = objectpath.Tree(data['modules'])
    result = tuple(json_tree.execute('$..resources[0]'))

result является

('aws_security_group.vpc-xxxxxxx-test-1', 'aws_security_group.vpc-xxxxxxx-test-2')

Это нормально, но я не могу извлечь id, любая помощь приветствуется, также используйте другие методы

Спасибо

1 Ответ

1 голос
/ 03 апреля 2019

Я не знаю objectpath, но я думаю, что вам нужно:

tree.execute('$..resources[0]..primary.id')

или даже просто

tree.execute('$..resources[0]..id')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...