Le rendu de JSON dans le graal
J'utilise le code suivant pour restituer les données au format JSON.
render(contentType:"text/json") {
results = array {
db.eachRow(query) { row ->
def rs = row.toRowResult()
def a = b(rs.name,c,d)
aMap.put("A",a)
pair(aMap)
}
}
if (results) {
status = "OK"
}
else {
status ="Nothing present"
}
}
Le code ci-dessus génère JSON dans le format suivant
{
"results": [
{"A":"value1"},
{"A":"value2"},
...................
{"A":"valuen"}
],
"status":"OK"
}
Comme u voir ci-dessus, les données sont rendues comme un tableau d'objets. Est il possible que je peux rendre les résultats des données comme un tableau d'éléments. Comme
{
"results": [
"value1",
"value2",
...................
"valuen"
],
"status":"OK"
}
Vous devez vous connecter pour publier un commentaire.
La façon dont l'objet JSON est en cours de construction est tout à fait obscur. Ce que j'aime faire pour rendre réponses JSON dans graal est la création d'une carte ou de la liste en groovy, et ensuite utiliser le
render
méthode juste pour le convertir en JSON.Procéder à la transformation de la
rowResult
's à l'intérieur de la méthode render rend assez déroutant, je préfère aller quelque chose comme ceciJe pense que c'est plus lisible, et encore plus courte. Cet extrait vous obtient le résultat souhaité: pas d'objets à l'intérieur de la
results
tableau, juste chaînes.Notez l'utilisation de
rows
, qui renvoie une liste de RowResult de l', éliminant la nécessité d'obtenir auprès du ResultSet. La liste est utilisée pour collecter les transformé valeura
en appelantb
sur chaque ligne le nom. Recueillir les éléments n'implique pas la création d'une carte (comme dans le{ "A":"value1"}
JSON vous), tout de même @will-buck réalisé avec le<<
opérateur sur une nouvelle liste vide.Tout ce que nous faisons avec la méthode de rendu est de déclarer la
text/json
type de contenu et en passant un littéral carte contenant les clésresults
etstatus
, qui vous voulez écrire la réponse. L'opérateur conditionnel est utilisé de manière concise déterminer l'état. Il pourrait également être utilisé comme ce, par le biais de l'JSON convertisseur @will-buck également mentionné:{}
.Seulement par un peu 🙂 Juste besoin de changer
d'une collection ou d'une liste, plutôt que d'une carte. donc, quelque chose comme
Vous obtiendrez ce que vous voulez!
Au passage, il y a un JSON convertisseur graal qui va faire que la chaîne de la construction pour vous. Il regarde ici
Cela devrait être assez pour rendre un JSON à partir de contrôleur: