Как перебрать этот Go интерфейс - PullRequest
0 голосов
/ 20 февраля 2020

Вот пример моего JSON сообщения:

{
    "jsonFilter" :[{
        "column": "",
        "contains": "",
        "condition": "",
        "not": true
    }, {
        "column": "",
        "contains": "",
        "condition": "",
        "not": true
    }]
}

Мой обработчик Echo Framework:

func GetFilteredFileData(c echo.Context) error {
    body := echo.Map{}
    if err := c.Bind(&body); err != nil {
        fmt.Println(err)
    }

    fmt.Println(body)

    for key, element := range body {
        fmt.Println(key, element)
    }
}

Результаты:

jsonFilter [map[column:StartTimestamp condition:contains contains:<nil> not:false] map[column:SourceIP condition:startsWith contains:<nil> not:true]]

Это недоступен индекс и доступ к ключу. Мне сказали, что мне нужно сделать структуру или 2, но все мои усилия там не сработали (схема гориллы, json .Marshal, et c)

Как правильно взять эту карту и сделать его действительно применимым в переменной / struct ref?

1 Ответ

4 голосов
/ 20 февраля 2020

Вы можете разобрать это json в следующую структуру:

type Body struct {
  Filter []JSONFilter `json:"jsonFilter"`
}

type JSONFilter struct {
   Column string `json:"column"`
   Contains string `json:"contains"`
   Condition string `json:"condition"`
   Not bool `json:"not"`
}

Я не знаю об этом эхо-фреймворке, но похоже, что-то вроде этого должно работать:

    body := Body{}
    if err := c.Bind(&body); err != nil {
        fmt.Println(err)
    }

Или json.Unmarshal, если вышеперечисленное не подходит.

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