Maison  >  Article  >  développement back-end  >  Comment ignorer les champs d'erreur lors de "Unmarshal" en cours ?

Comment ignorer les champs d'erreur lors de "Unmarshal" en cours ?

WBOY
WBOYavant
2024-02-09 09:00:20382parcourir

如何在 go 中的“Unmarshal”期间跳过错误字段?

Pendant le processus de désérialisation JSON (Unmarshal) à l'aide du langage Go, nous pouvons parfois rencontrer des champs d'erreur qui ne peuvent pas être traités. Ces champs d'erreur peuvent provoquer l'arrêt du programme, affectant l'exécution normale du code. Alors, existe-t-il un moyen d'ignorer ces champs d'erreur pendant le processus Unmarshal ? La réponse est oui. Cet article vous présentera comment utiliser certaines techniques du langage Go pour ignorer les champs d'erreur rencontrés lors d'Unmarshal. Continuons la lecture.

Contenu de la question

J'utilise json.Unmarshal(body, outputStruct) pour convertir un tableau d'octets en structure. Des erreurs peuvent survenir lors du déclassement.

Par exemple, la structure est :

type Item struct {
    Price       float64  `json:"price"`
    Quantity    int      `json:"quantity"`
}

Si je passe quantity comme valeur flottante au lieu d'un entier, cela génère une erreur. Je veux savoir comment désorganiser uniquement les champs valides et ignorer les champs contenant des erreurs ?

Donc, si je désorganise un json :

{ price: 10, quantity: 2.5 }

Je veux juste obtenir la valeur price dans la structure mais laisser la quantité comme valeur initiale par défaut.

Solution

Vous ne pouvez pas.

Si votre JSON contient des flottants, vous ne pouvez tout simplement pas les transformer en entiers. Vous devez :

  1. Utilisez float64 et gérez les nombres non entiers dans le code après le désorganisation
  2. Écrivez votre propre UnmarshalJSON pour vos types
  3. Effectuez un démarchage en deux étapes, une fois en ignorant le ("-") Quantity, pour qu'il n'échoue pas et effectuez seulement le deuxième démarchage de la Quantité (la nouvelle structure) et ignorez l'erreur.

2 est la « meilleure » façon, mais je ne sais pas quelle est la logique derrière « sauter les champs du mauvais type » ? Si la quantité est de 2,5, quelle sera la valeur de la quantité ? 0 ? Pourquoi?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer