JSON немаршальный массив целых чисел со знаком в Go - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь демаршировать JSON из массива целых чисел в кусочек байта в Go.

Проблема в том, что мы можем сделать это только тогда, когда массив в JSON содержит положительные целые числа как это будет распознано как uint8 в Go. Он не работает, когда массив содержит отрицательные целые числа.

Например:

  • этот массив будет работать: [1, 2, 3, 4, 5]
  • этот массив не будет работать: [-14, 2, 3, 4, 5] (-14 отрицательно)

Это сообщение об ошибке, которое я получил

Cannot unmarshal config file; err= json: cannot unmarshal number -14 int to Go struct field <struct_field> of type uint8

Можно ли как-нибудь сделать JSON немаршализованный массив с отрицательными целыми числами в кусочек байта в Go?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Спасибо всем за ответы.

Я нашел решение: так как я хочу, чтобы байтовый массив и байт не могли содержать подписанное int, то я могу преобразовать подписанное int в unsigned первым в JSON ввод в автономном режиме, тогда я могу сделать JSON unmarshal с новым массивом без знака.

Ссылка на игровую площадку: https://play.golang.org/p/Th2DC9AGeEs

Код для справки:

package main

import (
    "fmt"
)

func main() {
    arr := []int8{-14,1,2,3,4}
    var bytes []byte
    for _, val := range arr {
        bytes = append(bytes, convertToByte(val))
    }
    fmt.Println(bytes) // will print [242 1 2 3 4]
}

func convertToByte(value int8) byte {
    return byte(value)
}
0 голосов
/ 22 апреля 2020

Есть ли способ сделать JSON немаршализованный массив с отрицательными целыми числами в кусочек байта в Go?

Нет, потому что отрицательные числа находятся за пределами допустимый диапазон значений байтов , так же как любое число больше 255.

...