Comment puis-je lire un fichier JSON dans une structure, puis le rediriger vers une chaîne JSON avec les champs Struct comme clés (plutôt que les clés json d'origine)?
(voir Desired Output to Json File
ci-dessous ...)
Code:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type Rankings struct {
Keyword string `json:"keyword"`
GetCount uint32 `json:"get_count"`
Engine string `json:"engine"`
Locale string `json:"locale"`
Mobile bool `json:"mobile"`
}
func main() {
var jsonBlob = []byte(`
{"keyword":"hipaa compliance form", "get_count":157, "engine":"google", "locale":"en-us", "mobile":false}
`)
rankings := Rankings{}
err := json.Unmarshal(jsonBlob, &rankings)
if err != nil {
// Nozzle.printError("opening config file", err.Error())
}
rankingsJson, _ := json.Marshal(rankings)
err = ioutil.WriteFile("output.json", rankingsJson, 0644)
fmt.Printf("%+v", rankings)
}
Sortie à l'écran:
{Keyword:hipaa compliance form GetCount:157 Engine:google Locale:en-us Mobile:false}
Sortie dans un fichier Json:
{"keyword":"hipaa compliance form","get_count":157,"engine":"google","locale":"en-us","mobile":false}
Sortie souhaitée dans le fichier Json:
{"Keyword":"hipaa compliance form","GetCount":157,"Engine":"google","Locale":"en-us","Mobile":false}
Si je comprends bien votre question, tout ce que vous voulez faire est de supprimer les balises Json de votre définition de struct.
Alors:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type Rankings struct {
Keyword string
GetCount uint32
Engine string
Locale string
Mobile bool
}
func main() {
var jsonBlob = []byte(`
{"keyword":"hipaa compliance form", "get_count":157, "engine":"google", "locale":"en-us", "mobile":false}
`)
rankings := Rankings{}
err := json.Unmarshal(jsonBlob, &rankings)
if err != nil {
// Nozzle.printError("opening config file", err.Error())
}
rankingsJson, _ := json.Marshal(rankings)
err = ioutil.WriteFile("output.json", rankingsJson, 0644)
fmt.Printf("%+v", rankings)
}
Résulte en:
{Keyword:hipaa compliance form GetCount:0 Engine:google Locale:en-us Mobile:false}
Et le fichier en sortie est:
{"Keyword":"hipaa compliance form","GetCount":0,"Engine":"google","Locale":" en-us","Mobile":false}
Exemple en cours d'exécution à http://play.golang.org/p/dC3s37HxvZ
Remarque: GetCount affiche 0, puisqu'il a été lu en tant que "get_count"
. Si vous souhaitez lire un code JSON avec "get_count"
vs "GetCount"
, mais que vous produisez "GetCount"
, vous devrez effectuer une analyse complémentaire.
Voir Go - Copiez tous les champs communs entre structs pour plus d’informations sur cette situation particulière.
Essayez de changer le format JSON dans la structure
type Rankings struct {
Keyword string `json:"Keyword"`
GetCount uint32 `json:"Get_count"`
Engine string `json:"Engine"`
Locale string `json:"Locale"`
Mobile bool `json:"Mobile"`
}