Maison >développement back-end >Golang >Comment puis-je obtenir des clés JSON triées lors du tri dans Go ?

Comment puis-je obtenir des clés JSON triées lors du tri dans Go ?

DDD
DDDoriginal
2024-12-09 09:54:08796parcourir

How Can I Achieve Sorted JSON Keys When Marshalling in Go?

JSON Marshalling in Go avec des clés triées

En Python, produire du JSON avec des clés dans un ordre trié est aussi simple que de définir le paramètre sort_keys sur Vrai. Mais qu'en est-il de Go ? Cette question explore les options permettant d'obtenir un comportement similaire dans Golang.

Approche de commande des clés de Go

Contrairement à Python, le package JSON de Go ordonne de manière inhérente les clés lors du marshalling. Les règles de classement spécifiques sont les suivantes :

  • Les clés des cartes sont triées lexicographiquement.
  • Les clés des structures sont organisées dans l'ordre dans lequel elles sont définies dans la structure.

Cet ordre automatique des clés signifie que les développeurs n'ont pas besoin de spécifier explicitement un paramètre sort_keys comme en Python. L'ordre des clés est déterminé par les algorithmes de tri internes de Go.

Sous le capot

L'implémentation de l'ordre des clés peut être trouvée dans encoding/json/encode.go , plus précisément à partir de la ligne 359. Ici, l'encodeur parcourt les clés de la carte ou de la structure et les trie avant de sérialiser le JSON.

Exemple

Considérez le code Go suivant :

package main

import "encoding/json"

type MyStruct struct {
    Field1 string
    Field2 int
}

func main() {
    data := map[string]int{"apple": 1, "banana": 3, "cherry": 2}
    jsonData, _ := json.Marshal(data)

    fmt.Println(string(jsonData))
}

La sortie de ce code sera :

{
    "apple": 1,
    "banana": 3,
    "cherry": 2
}

Comme vous pouvez voyez, les clés sont automatiquement triées lexicographiquement, sans aucune configuration supplémentaire.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn