resultset avec JSONBuilder

1
0
-1

Bonjour,
j'essaie d'obtenir le résultat de ma requête sql sous une forme valide JSON.
J'ai vue que certain utilisé JSONBuilder dans mon cas de figure par contre j'obtient un résultat non valide( = à la place des : et pas de "" entre les clés et valeurs)

Requête : select * from Batiment

Script :

import groovy.json.JsonBuilder;

List<Object> listBatiment = new ArrayList<Object>();
while(resultset.next()){
    def builder = new JsonBuilder();
    def line = builder {
        Batiment resultset.getString("Batiment")
        Reference resultset.getString("Reference")
        Nom resultset.getString("Nom")
        Secteur resultset.getString("Secteur")
        Type resultset.getString("Type")
        Adresse resultset.getString("Adresse")
    }
    listBatiment.add(line);
}
return listBatiment;

Resultat : [{Batiment=x, Reference=N0294014, Nom=Immeuble, Secteur=Rue, Type=T1, Adresse=x france}, {Batiment=chateau, Reference=N00023, Nom=palace, Secteur=espace, Type=T100, Adresse=Avenue 89}]

Si quelqu'un à une idée de ce qu'il me manque merci d'avance.

2 answers

1
+1
-1

Bonjour,

Vous pouvez utiliser le JSonBuilder de cette manière:

import groovy.json.JsonBuilder; 
def listBatiment = [] 
while(resultset.next()){
 listBatiment.add([ 
   Batiment:resultset.getString('Batiment'), 
   Reference:resultset.getString('Reference'),
   Nom:resultset.getString('Nom'), 
   Secteur:resultset.getString('Secteur'), Type:resultset.getString('Type'),
   Adresse:resultset.getString('Adresse') 
  ])
 } 
return new JsonBuilder(listBatiment).toString()

Vous pouvez effectuer le chemin inverse (String -> Object) en utilisant le JSonSlurper:

import groovy.json.JsonSlurper 

def slurper = new JsonSlurper() 
def object = slurper.parseText(jsonString) 

//WARING object can be a List if the jsonString is an Array 
return object.Batiment //or object[0].Batiment if object is List

Vous pouvez utiliser une opération (en sortie de connecteur ou dans une activité) pour assigner la valeur a une variable metier.

HTH

Romain

1
0
-1

Bonjour,
Tu peux utiliser le code ci-dessous au niveau de la récupération des retours du connecteur, il retourne un résultat json valide:

import java.sql.ResultSetMetaData;
import org.json.JSONArray;
import org.json.JSONObject;

String jsonString = "";
JSONObject jsonobject = null;
JSONArray jsonArray = new JSONArray();

while (resultset.next()) {
ResultSetMetaData metaData = resultset.getMetaData();
jsonobject = new JSONObject();
for (int i = 0; i < metaData.getColumnCount(); i++) {
jsonobject.put(metaData.getColumnLabel(i + 1),resultset.getObject(i + 1));
}
jsonArray.put(jsonobject);
}

if (jsonArray.length() > 0) {

jsonString= jsonArray.toString();

}

return jsonString;

Comments

Submitted by brt6178_1422639 on Thu, 05/07/2020 - 16:30

Bonjour,

J'ai essayé le code ci-dessus pour un besoin similaire, et ça marche. Par contre, comme on récupère un résultat sous forme de String, comment peut-on faire pour le stocker dans une variable métier multiple, composée d'autant de sous-variables que de colonnes résultantes du connecteur (dans l'exemple ci-dessus : batiment, reference, etc.) ?

D'avance, merci,

Thierry.

Notifications