РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1138 of 1593 menu

Тип json.Number

Тип json.Number представляет собой строку, содержащую числовое значение в формате JSON. Он используется для декодирования числовых полей без потери точности, так как стандартные типы float64 или int64 могут не сохранить исходное значение. В первый параметр мы передаем строку JSON для декодирования, во второй параметр мы передаем указатель на переменную типа json.Number.

Синтаксис

var num json.Number err := json.Unmarshal(data, &num)

Пример

Давайте декодируем число из JSON в тип json.Number и выведем его значение:

package main import ( "encoding/json" "fmt" ) func main() { data := []byte(`12345678901234567890`) var num json.Number err := json.Unmarshal(data, &num) if err != nil { fmt.Println(err) return } res := num.String() fmt.Println(res) }

Результат выполнения кода:

"12345678901234567890"

Пример

Давайте декодируем объект JSON с числовым полем в структуру с полем типа json.Number:

package main import ( "encoding/json" "fmt" ) type User struct { ID json.Number `json:"id"` Name string `json:"name"` } func main() { data := []byte(`{"id": 98765432109876543210, "name": "Alice"}`) var user User err := json.Unmarshal(data, &user) if err != nil { fmt.Println(err) return } res := user.ID.String() fmt.Println(res) }

Результат выполнения кода:

"98765432109876543210"

Пример

Давайте преобразуем json.Number в int64 и float64 с помощью методов Int64 и Float64:

package main import ( "encoding/json" "fmt" "log" ) func main() { data := []byte(`42.5`) var num json.Number err := json.Unmarshal(data, &num) if err != nil { log.Fatal(err) } intVal, err := num.Int64() if err != nil { fmt.Println("Cannot convert to int64") } else { fmt.Printf("Int64: %d\n", intVal) } floatVal, err := num.Float64() if err != nil { fmt.Println("Cannot convert to float64") } else { fmt.Printf("Float64: %f\n", floatVal) } }

Результат выполнения кода:

"Int64: 42" "Float64: 42.500000"

Пример

Давайте используем json.Number для декодирования массива чисел с сохранением точности:

package main import ( "encoding/json" "fmt" ) func main() { data := []byte(`[12345678901234567890, 42.5, 100]`) var numbers []json.Number err := json.Unmarshal(data, &numbers) if err != nil { fmt.Println(err) return } for i, num := range numbers { res := num.String() fmt.Printf("numbers[%d]: %s\n", i, res) } }

Результат выполнения кода:

"numbers[0]: 12345678901234567890" "numbers[1]: 42.5" "numbers[2]: 100"

Смотрите также

  • функцию json.Unmarshal,
    которая декодирует данные JSON в значение Go
  • функцию json.Marshal,
    которая кодирует значение Go в JSON
  • тип json.RawMessage,
    который представляет необработанные данные JSON
  • функцию json.Valid,
    которая проверяет, является ли строка корректным JSON
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить