Как объединить список интерфейсов в golang в одну большую карту? - PullRequest
0 голосов
/ 22 апреля 2020

Встретиться с проблемой обработки данных в go. У меня есть список интерфейсов

[SUSPENDED_PROCESS]
[MITRE_T1055_PROCESS_INJECT MODIFY_PROCESS]
<nil>
<nil>
[ENUMERATE_PROCESSES MITRE_T1057_PROCESS_DISCOVERY]
[MODIFY_MEMORY_PROTECTION]
<nil>
[SUSPENDED_PROCESS]
[MODIFY_MEMORY_PROTECTION]
<nil>
[SUSPENDED_PROCESS]
<nil>
[MODIFY_MEMORY_PROTECTION]
<nil>
<nil>
[SUSPENDED_PROCESS]
[MITRE_T1055_PROCESS_INJECT MODIFY_PROCESS]

Я хочу объединить этот [] интерфейс {} в один интерфейс {}, исключая значения nil и дедупликацию. Пока это мой код.

for _, event := range results.([]interface{}) {
            if tid, found := event.(map[string]interface{})["threatIndicators"]; found {
                fmt.Println(tid) //these are the interfaces i want to merge
                if tid != nil { //concatenate all non null tids
                    for k, v := range tid.([]interface{}) { //iterate through each tid
                        tidList[k] = v
                        // fmt.Println(tidList)
                    }
                }
            }
}

Проблема, с которой я сталкиваюсь, состоит в том, что эти карты имеют неуникальные ключи (ключ - это индекс на карте). Так что мой код будет перезаписан, если ключи одинаковые, что произойдет в этом случае. Есть ли способ сделать это? В python это было бы простое понимание списка, но я изо всех сил пытаюсь понять, как выполнить sh в Go. Конечным результатом будет одна карта, в идеале содержащая все эти значения. У меня, к сожалению, нет контроля над этой структурой, я анализирую данные из API.

1 Ответ

2 голосов
/ 22 апреля 2020

Если у вас есть несколько записей с одним и тем же ключом, и вы не хотите терять данные, то вы можете сохранить данные в карте срезов:

map[string][]interface{}

Тогда вместо перезаписи вы добавите каждый ключ:

tidList[k] = append(tidlist[k], v)

Другой вариант может заключаться в том, чтобы найти уникальное значение внутри ThreatIndicators, например идентификатор, и использовать его в качестве ключа.

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