-2
votes

Comment maréchaler une tranche de structure à JSON valide

J'écris une API Golang et un client, mais je ne peux pas être valide JSON à partir d'une tranche de structures dans l'API. Le résultat que j'ai dans mon client ressemble à ceci.

[{0 Mark 1234 FAUX} {0 JOHN 3456 FAUX}] P> BlockQuote>

J'ai besoin de ce Json pour ressembler à p>

[{"id": 0, "Nom": Mark, "Pin": 1234, "Active": false} {"ID": 0, "Nom": John, "Pin": 3456, "Active ": faux}] p> blockQuote>

Je ne peux pas trouver des exemples me montrer comment coder cela correctement et ce n'est pas un duplicata de rien que je puisse trouver malgré un avertissement que c'est. Bien que mon client analyse avec succès le JSON à une structure, je em> strud> a besoin de retourner JSON à un client iOS qui le demande. Le flux est API -> API -> IOS Client. Je ne sais pas comment produire JSON à partir de la structure pour le client iOS. P>

Voici mon code API. P>

func (rs *appResource) getEmployees(w http.ResponseWriter, r *http.Request) {

    path := rs.url + "/employees"

    fmt.Println(path)

    res, err := rs.client.Get(path)

    if err != nil {
        log.Println("error in get")
        log.Fatal(err)
        http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
        return
    }

    defer res.Body.Close()

    if res.StatusCode == 500 {
        fmt.Printf("res.StatusCode: %d\n", res.StatusCode)
        http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
        return

    }

    if res.StatusCode == 404 {
        fmt.Printf("res.StatusCode: %d\n", res.StatusCode)
        http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
        return
    }

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Fatal(err)
        http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
        return
    }

// here I want to return actual JSON to an iOS client    

    w.WriteHeader(http.StatusOK)
    w.Write([]byte("{ok}"))
}

go

4 commentaires

Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été Déplacé pour discuter .


J'ai besoin des deux, je retournerais Json au client requérant si je savais comment, c'est pourquoi il n'y a pas de code à faire JSON.


Pouvez-vous continuer la discussion dans le chat? Commentaires étendus Trip Drapeaux Auto et maintenant je suis en train de faire des pinges.


Non, je ne suis pas, je retourne un statut et {ok}, je veux retourner le contenu de ma structure comme Json.


3 Réponses :


1
votes

Je suis en fait surpris que votre code soit exécuté du tout puisque vous disposez de 2 variables inutilisées (ERR, ERR de liste des écouteurs). Toute façon qui devrait fonctionner, ajout d'une FMT.PRINTLN afin que vous puissiez voir le résultat de la console xxx

autre Exemple d'exécution: xxx

sortie:

{"ID": 1, "Nom": "Mark", "Pin": 1234, "Active": True}


5 commentaires

La raison pour laquelle j'ai une erreur inutilisée vars est simplement que j'ai supprimé la vérification des erreurs de la brièveté dans cette question. J'ai vu de nombreux exemples de données de structure codées durement marshaling à JSON, mais cela ne fonctionne pas avec mon code dans lequel les données sont chargées de manière dynamique dans une requête SQL.


@ Markhorrocks Il n'auront pas d'importance si les données chargées d'une requête SQL ou ont été codées durs, à la fin, vous avez une tranche d'employé qui devient marshalé. Puissiez-vous modifier votre message et ajouter une photo de débogage avec les données de la tranche? juste avant de le marshaler


C'était correct mais la réponse de @antham est correcte si je peux avoir une séparation des virgules.


Je ne reçois pas de sortie comme ça, je souhaite que ce soit. Mon code me donne une sortie comme celle-ci. [{EmployéId: 3 Nom: Mark Pin: 1234 Actif: False} {EmployéAd: 4 Nom: John Pin: 3456 Active: False}]


Travaillé pour moi merci! Il suffit de regarder pour le typo println dans la fonction ListeMAPPPestes - il suffit de le retourner à imprimer et tout est bon :)



0
votes

Qu'est-ce que vous semblez vouloir est une vidage du JSON, vous déchargez ici la structure, ce que vous pourriez faire avec la struct consiste à jeter la clé de la clé et de la valeur avec% + V dans un imprimeur, jetez un coup d'œil ici: https://golang.org/pkg/fmt/#hdr-Imprimer .


1 commentaires

Bien que votre suggestion me donne les clés, cela ne me donne pas la séparation des virgules.



1
votes

Ce que votre code est actuellement imprimant est le contenu d'une structure, pas de JSON. Lorsque vous imprimez le contenu d'une structure, par défaut, vous imprimerez uniquement les valeurs dans cette structure. Cela signifie que fmt.println (employés.employel) produira quelque chose comme: xxx

si vous souhaitez également imprimer des valeurs de champ, vous devez ajouter un Format 'verbe' % + v qui imprimera des noms de champs. FMT.PRINTF ("% + v \ n", employés.employale) devrait imprimer quelque chose comme: xxx

Je pense que tu veux réellement Regardez de nouveau sur la tâche de faire une nouvelle chaîne JSON afin d'écrire ce contenu de retour pour le client.


4 commentaires

Presque là-bas mais il n'y a pas de séparation des virgules.


Où est-ce corrigé? En fait, je veux que les virgules :) Votre chaîne d'impression ne me donne aucun.


J'ai corrigé la sortie attendue dans ma réponse. La ligne que vous imprimez n'est pas JSON mais une structure. Si vous souhaitez produire JSON, vous devrez convertir cette structure en chaîne JSON.


Comment puis-je convertir cela en une chaîne JSON valide?