#arrays #json #go
#массивы #json #Вперед
Вопрос:
У меня есть структура для данных изображения
type ImageData struct {
Name string
Data []byte
}
Поле данных представляет собой изображение, преобразованное в байты.
У меня есть jsonImages
, как [{"Data":<many-many bytes>, "Name":"abracadabra"}]
и var imagesData []ImageData
. И когда я пытаюсь использовать json.Unmarshal([]byte(jsonImages), amp;imagesData)
, в результате fmt.Println(imagesData)
я получаю [{abracadabra []}]
. Поле данных пустое. Что я делаю не так? Спасибо за любую помощь!
Комментарии:
1. Какая ошибка возвращается из json. Unmarshal? json. Unmarshal предполагает, что [] байтовые значения кодируются в base64. Какая кодировка используется для ваших данных изображения?
2. @MuffinTop спасибо за комментарий. Ошибки нет. Все идет хорошо, но одно из полей пустое. Я получаю данные изображения из приложения ios с помощью локального http-сервера. И, честно говоря, я не знаю, какой это конкретный тип кодировки. Есть тип, называемый Data, вот и все.
Ответ №1:
Я попытался воспроизвести сценарий с приведенным ниже фрагментом, он работал нормально.Это тот, который вы пытаетесь:
package main
import (
"encoding/json"
"fmt"
)
type Imgdta struct {
Name string
Dta []byte
}
func main() {
var Imgdta1 Imgdta
var Imgdta2 Imgdta
Imgdta1.Dta = []byte("asfafalsffa")
Imgdta1.Name = "asnakakad"
imgjson, _ := json.Marshal(Imgdta1)
fmt.Println("Input Json:-", string(imgjson))
json.Unmarshal((imgjson), amp;Imgdta2)
fmt.Println((Imgdta2))
}
…
Результат:
Input Json:- {"Name":"asnakakad","Dta":"YXNmYWZhbHNmZmE="}
{asnakakad [97 115 102 97 102 97 108 115 102 102 97]}
URL-адрес — https://play.golang.org/p/LQNwLqDTvt5