Разбор необработанной строки int a golang struct в go gin - PullRequest
1 голос
/ 02 августа 2020

У меня есть данные, поступающие из запроса в текстовом / обычном формате в этом формате:

machine_id=XXX&v_k=44&v_dr=4.0&v_total=44.9&message="Idle Data"

Как я могу разобрать это в структуре или map[string]string в golang?

type Event struct {
    MachineID    string  `json:"machine_id"`
    Message      string  `json:"message"`
    VDr         float64 `json:"v_dr"`
    VKeg         float64 `json:"v_k"`
    VTotal       float64 `json:"v_total"`
}

Я ищу эквивалент

jsonMap := make(map[string]interface{})
err = json.Unmarshal(body, &jsonMap)

или

var p Event
err := json.NewDecoder(c.Request.Body).Decode(&p)

, если исходная строка была отформатирована json. Я не могу изменить заголовок, исходящий от клиента, на application/x-www-form-urlencoded и обработать его как форму.

1 Ответ

3 голосов
/ 02 августа 2020

Метод ParseQuery в пакете url сделает это, с оговоркой, что элемент, который у вас в кавычках, message = "Idle Data", может быть неправильно проанализирован, что означает, что вы захотите вызвать url.PathEscape первым.

url.ParseQuery("machine_id=XXX&v_k=44&v_dr=4.0&v_total=44.9&message=Idle+Data"))

ParseQuery возвращает тип Values, который равен map[string][]string

Если это исходит от хотя HTTP-запрос. у объекта Request есть метод обработки строки запроса. Это Форма синтаксического анализа

https://play.golang.org/p/NUvrXnsPM89

...