шаблон jinja2 для сложного парсинга json

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

Введите Json-

      {
  "REPORT": {
    "STATUS": "0",
    "MESSAGE": null,
    "EXPRESSION": [
      {
        "type": "multi",
        "op": "is",
        "cast": "Mixed",
        "objlistname": "AGENT",
        "objid": "1212121",
        "objglobalname": "AGENT",
        "MULTI": [
          {
            "name": "AGENT",
            "INSTANCE": [
              {
                "name": "Server",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "test.services"
                }
              },
              {
                "name": "Media Server",
                "cast": "String",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "test1.services"
                }
              },
              {
                "name": "Group",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "ABCD"
                }
              },
              {
                "name": "Schedule",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "BRAS"
                }
              },
              {
                "name": "Client",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "local"
                }
              },
              {
                "name": "Domain Name",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "/ABC"
                }
              },
              {
                "name": "Status",
                "cast": "String",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "failed"
                }
              },
              {
                "name": "Started",
                "cast": "Int",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "1648117370"
                }
              },
              {
                "name": "Finished",
                "cast": "Int",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "1648120649"
                }
              },
              {
                "name": "Status Code Summary",
                "cast": "String",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "Dropped Session - No progress reported."
                }
              },
              {
                "name": "Duration",
                "cast": "Duration",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "3279"
                }
              }
            ]
          },
          {
            "name": "AGENT",
            "INSTANCE": [
              {
                "name": "Server",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "asd.services"
                }
              },
              {
                "name": "Media Server",
                "cast": "String",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "bddf.services"
                }
              },
              {
                "name": "Group",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "DDDD"
                }
              },
              {
                "name": "Schedule",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "BRASddfd"
                }
              },
              {
                "name": "Client",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "abc.local"
                }
              },
              {
                "name": "Domain Name",
                "cast": "String",
                "key": "true",
                "trend": "false",
                "ITEM": {
                  "end": "-1",
                  "start": "-1",
                  "text": "/GADV"
                }
              },
              {
                "name": "Status",
                "cast": "String",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "success"
                }
              },
              {
                "name": "Started",
                "cast": "Int",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "1648108812"
                }
              },
              {
                "name": "Finished",
                "cast": "Int",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "1648124485"
                }
              },
              {
                "name": "Status Code Summary",
                "cast": "String",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "Activity completed with exceptions."
                }
              },
              {
                "name": "Duration",
                "cast": "Duration",
                "key": "false",
                "trend": "false",
                "ITEM": {
                  "end": "1648108800",
                  "start": "1648108800",
                  "text": "15673"
                }
              }
            ]
          }
        ]
      },
      {
        "type": "multi",
        "op": "is",
        "cast": "Mixed",
        "objlistname": "AGENT",
        "objid": "asdfasdfasfasfas",
        "objglobalname": "AGENT",
        "MULTI": {
          "name": "AGENT",
          "INSTANCE": [
            {
              "name": "Server",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "asdfasdf.services"
              }
            },
            {
              "name": "Media Server",
              "cast": "String",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648044000",
                "start": "1648044000",
                "text": "basfgdasd.services"
              }
            },
            {
              "name": "Group",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "DFDFDF"
              }
            },
            {
              "name": "Schedule",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "DFDSFSD"
              }
            },
            {
              "name": "Client",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "adfasdfsa.au"
              }
            },
            {
              "name": "Domain Name",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "/MAKD"
              }
            },
            {
              "name": "Status",
              "cast": "String",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648044000",
                "start": "1648044000",
                "text": "failed"
              }
            },
            {
              "name": "Started",
              "cast": "Int",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648044000",
                "start": "1648044000",
                "text": "1648044004"
              }
            },
            {
              "name": "Finished",
              "cast": "Int",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648044000",
                "start": "1648044000",
                "text": "1648052473"
              }
            },
            {
              "name": "Status Code Summary",
              "cast": "String",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648044000",
                "start": "1648044000",
                "text": "Dropped Session - No progress reported."
              }
            },
            {
              "name": "Duration",
              "cast": "Duration",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648044000",
                "start": "1648044000",
                "text": "8469"
              }
            }
          ]
        }
      },
      {
        "type": "multi",
        "op": "is",
        "cast": "Mixed",
        "objlistname": "AGENT",
        "objid": "dfasdfasf",
        "objglobalname": "AGENT",
        "MULTI": {
          "name": "AGENT",
          "INSTANCE": [
            {
              "name": "Server",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "abc.services"
              }
            },
            {
              "name": "Media Server",
              "cast": "String",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648047600",
                "start": "1648047600",
                "text": "def.services"
              }
            },
            {
              "name": "Group",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "DFSFSFSDF"
              }
            },
            {
              "name": "Schedule",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "SDFSDFs"
              }
            },
            {
              "name": "Client",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "bi-pdb01"
              }
            },
            {
              "name": "Domain Name",
              "cast": "String",
              "key": "true",
              "trend": "false",
              "ITEM": {
                "end": "-1",
                "start": "-1",
                "text": "/BINO"
              }
            },
            {
              "name": "Status",
              "cast": "String",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648047600",
                "start": "1648047600",
                "text": "success"
              }
            },
            {
              "name": "Started",
              "cast": "Int",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648047600",
                "start": "1648047600",
                "text": "1648047608"
              }
            },
            {
              "name": "Finished",
              "cast": "Int",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648047600",
                "start": "1648047600",
                "text": "1648050178"
              }
            },
            {
              "name": "Status Code Summary",
              "cast": "String",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648047600",
                "start": "1648047600",
                "text": "Activity completed with exceptions."
              }
            },
            {
              "name": "Duration",
              "cast": "Duration",
              "key": "false",
              "trend": "false",
              "ITEM": {
                "end": "1648047600",
                "start": "1648047600",
                "text": "2570"
              }
            }
          ]
        }
      }
    ]
  }
}

требуется вывод -

      {
      "clients": [
        {
          "@name": "AGENT",
          "INSTANCE": {
            "Server": "test.services",
            "Media Server": "test1.services",
            "Group": "ABCD",
            "Schedule": "BRAS",
            "Client": "local",
            "Domain Name": "/ABC",
            "Status": "failed",
            "Started": "1648117370",
            "Finished": "1648120649",
            "Status Code Summary": "Dropped Session - No progress reported.",
            "Duration": "3279"
          }
        },
        {
          "@name": "AGENT",
          "INSTANCE": {
            "Server": "asd.services",
            "Media Server": "bddf.services",
            "Group": "DDDD",
            "Schedule": "BRASddfd",
            "Client": "abc.local",
            "Domain Name": "/GADV",
            "Status": "success",
            "Started": "1648108812",
            "Finished": "1648124485",
            "Status Code Summary": "Activity completed with exceptions.",
            "Duration": "15673"
          }
        },
        {
          "@name": "AGENT",
          "INSTANCE": {
            "Server": "asdfasdf.services",
            "Media Server": "basfgdasd.services",
            "Group": "DFDFDF",
            "Schedule": "DFDSFSD",
            "Client": "adfasdfsa.au",
            "Domain Name": "/MAKD",
            "Status": "failed",
            "Started": "1648044004",
            "Finished": "1648052473",
            "Status Code Summary": "Dropped Session - No progress reported.",
            "Duration": "8469"
          }
        },
        {
          "@name": "AGENT",
          "INSTANCE": {
            "Server": "abc.services",
            "Media Server": "def.services",
            "Group": "DFSFSFSDF",
            "Schedule": "SDFSDFs",
            "Client": "bi-pdb01",
            "Domain Name": "/BINO",
            "Status": "success",
            "Started": "1648047608",
            "Finished": "1648050178",
            "Status Code Summary": "Activity completed with exceptions.",
            "Duration": "2570"
          }
        },
      ]
    }

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

      {"clients" : [
{% for agents in REPORT.EXPRESSION -%}
{% set outer_loop = loop %}
{% if agents.MULTI is iterable and (agents.MULTI is not string and agents.MULTI is not mapping) -%}
{% for record in agents.MULTI -%}
{ "client":{{record }} } {{ ", " if not outer_loop.last or not loop.last else "" }}
{%- endfor %}
{%- else %}
{ "client":{{agents.MULTI }}}{{ ", " if not loop.last else "" }}
{%- endif %}
{%- endfor %}
]}

0 ответов

Другие вопросы по тегам