从具有重复名称的json数组进行python解析(mitre att&ck)

2024-06-16 10:12:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新手,试图解析来自mitre att&;的回购协议的数据;ck json文件,我一直在研究如何解析其中一个字段的数据——攻击阶段名称。它们存储在一个数组中,有时会有重复的名称,请参见以下内容:

"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获取这些字段吗?还有人知道如何描述这种数据格式和/或我正在尝试做什么,以便我可以尝试搜索解决方案吗?提前谢谢


Tags: 数据name名称chainget阶段patternkill
2条回答

您可能正在寻找类似于for loop的东西。一个简单的例子如下:

for attack in attack_pattern.kill_chain_phrases:

    get_phrase(attack)

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

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"

希望这是有道理的

更多信息here

相关问题 更多 >