Проблема при использовании json.Unmarshal() для массива байтов

#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