首页 > 解决方案 > python从具有重复名称的json数组中解析(mitre att&ck)

问题描述

我是一个新手,试图从 miter att&ck json 文件的 repo 中解析数据,并且一直停留在如何解析其中一个字段的数据 - 攻击阶段名称。它们存储在一个数组中,有时会有重复的名称,见下文:

"type": "attack-pattern",
            "kill_chain_phases": [
                {
                    "kill_chain_name": "mitre-attack",
                    "phase_name": "persistence"
                },
                {
                    "kill_chain_name": "mitre-attack",
                    "phase_name": "privilege-escalation"
                }
            ],

如果我尝试返回 的值get_phase(attack.kill_chain_phases[0].phase_name),python 仅在有时有多个值时返回一个值,例如privilege-escalation

如果我试图搞乱并使用这样get_phase(attack.kill_chain_phases[0].phase_name[0])的东西,输出是其中一个阶段名称的第一个字符c

如果我尝试做一些事情,比如get_phase(attack_pattern.kill_chain_phases[1].phase_name)我得到一个超出索引的错误......

有没有人知道如何使用 python 来获取这些字段?还有谁知道如何描述这种数据格式和/或我正在尝试做什么,以便我可以尝试搜索解决方案?提前致谢!

标签: pythonjsonparsing

解决方案


您将需要为此使用循环。获取要查找所有值的项目的父项,然后您可以循环并获取所有子项的值。

import json

json_string = """{
  "type": "attack-pattern",
  "kill_chain_phases": [
    {
      "kill_chain_name": "mitre-attack",
      "phase_name": "persistence"
    },
    {
        "kill_chain_name": "mitre-attack",
        "phase_name": "privilege-escalation"
    }
  ]
}
"""

parsed_json = json.loads(json_string)

# Loop through the parent "kill_chain_phases"
for kill_chain_phase in parsed_json["kill_chain_phases"]:
  # print out the children "phase_name" values
  print(kill_chain_phase["phase_name"]

你得到第一个字符,get_phase(attack.kill_chain_phases[0].phase_name[0]因为: get_phase(attack.kill_chain_phases[0].phase_name[0]=“持久性”

然后 Python 获取该字符串并将其视为一个列表: ["p", "e", "r", "s", "i", "s", "t", "e", "n", " c", "e"]

所以phase_name[0]会显示"p"

希望这是有道理的。

更多信息在这里


推荐阅读