"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo decodificar las cadenas JSON con valores Float64 almacenados como cadenas en Go?

¿Cómo decodificar las cadenas JSON con valores Float64 almacenados como cadenas en Go?

Publicado el 2025-03-23
Navegar:613

How to Decode JSON Strings with Float64 Values Stored as Strings in Go?

decoding json con la conversión de tipo de string a float64 in go

analizando las cadenas JSON que contienen valores de flotación 64 pueden plantear desafíos cuando los valores se almacenan como cadenas. Para abordar este problema, GO proporciona una solución directa.

Comprender el error:

al intentar decodificar una cadena JSON como "{" Nombre ":" Galaxy Nexus "," precio ":" 3460.00 "} usando la función JSON.unmarshal a continuación. Error:

json: cannot unmarshal string into Go value of type float64

Este error ocurre porque el decodificador JSON intenta convertir la representación de cadena del número de float64 a un valor float64 directamente, que no se admite. Annotation

Para resolver este problema, debe instruir explícitamente al decodificador que trate la cadena como un Float64 usando una anotación de conversión de tipo. Esta anotación se agrega a la definición de campo en la estructura del producto:

type el producto struct { Cadena de nombre Precio float64 `json:", cadena "` }

la etiqueta ", String" le dice al decodificador JSON que el campo de precio es una cadena que debe convertirse a un Float64.
type Product struct {
    Name  string
    Price float64 `json:",string"`
}

Código actualizado:

aquí es el código GO actualizado: Main importar ( "Codificación/JSON" "FMT" ) Tipo de estructura de producto { Cadena de nombre Precio float64 `json:", cadena "` } func Main () { S: = `{" nombre ":" Galaxy Nexus "," Precio ":" 3460.00 "}` Producto VAR Pro err: = json.unmarshal ([] byte (s) y pro) Si err == nil { fmt.printf ("% v \ n", pro) } demás { fmt.println (err) fmt.printf ("% v \ n", pro) } }

Expected Output:
package main

import (
    "encoding/json"
    "fmt"
)

type Product struct {
    Name  string
    Price float64 `json:",string"`
}

func main() {
    s := `{"name":"Galaxy Nexus", "price":"3460.00"}`
    var pro Product
    err := json.Unmarshal([]byte(s), &pro)
    if err == nil {
        fmt.Printf("% v\n", pro)
    } else {
        fmt.Println(err)
        fmt.Printf("% v\n", pro)
    }
}

Running this code will produce the expected output:{Name:Galaxy Nexus Price:3460}

The json.Unmarshal function successfully decoded the JSON string and converted the price from a string to a float64.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3