Задать вопрос
bibak
@bibak
Front-end dev

Как отправить массив в запросе guzzle?

Есть роут, который принимает запрос в таком виде
type SomeRequest struct {
  amount  float64    `json:"amount"`
  number  string     `json:"number"`
  id      int64      `json:"id"`
  numbers []string   `json:"numbers"`
}

Я отправляю такой запрос
$response = $guzzle->post('',[
     'headers' => [
         'Accept'      => 'application/json',
         'ApiKeyAuth'  => ...,
     ],
     'json' => [
         "amount"  => $amount,
         "number"  => $number,
         "id"      => (int) id,
         "numbers" => (array)$numbers,
     ],
]);


Получаю ошибку
json: 
cannot unmarshal object into Go struct field SomeRequest.numbers of type []string


Это из-за того, что при отправке запроса с помощью json все вложенные массивы тоже преобразуются в строки.

Вопрос, как можно отправить массив внутри запроса, чтобы тип остался как есть?
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
Ommonick
@Ommonick
qa+dev (scala, golang, ts/js, api, grpc)
часто помогает взять curl запрос (например сгенерить из postman) и посмотреть какого вида данные в нем
если numbers - массив строк - то надо указать в структуре
number string `json:"number,string"`

типа как тут
https://stackoverflow.com/questions/35674730/marsh...
(только в ответе а не в вопросе)

UPD. Недоглядел, у вас там вложенные структуры, чтобы оно нормально парсилось - должны быть две структуры
структура request, содержащая массив numbers
и
структура numbers, содержащая массив number типа строка

type SomeRequest struct {
amount float64 `json:"amount"`
id int64 `json:"id"`
numbers []Numbers `json:"numbers,array"` //вот тут не уверен в обозначении json
}

type Numbers struct {
number string `json:"number,string"`
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы