[JSON/SQL] Extraction de données dans un champ au format JSON
Bonjour,
j'essaie de récupérer des données dans un champ stocké sous forme de NCLOB dans une base Oracle.
Ce champ comporte des données pour 30 molécules.
A l'intérieur de chaque molécule, 22 valeurs sont renseignées.
Exemple sur une molécule :
Citation:
{
'[{
"molecule":{
"tauxDepart":"0.77","ecoPotentielBoite":"1.65","tauxStabilite":"1","tauxArrive":"0.9108","codeStabilite":"331","denoTauxArrive":"269","numTauxArrive":"245","code":"1","seuilIntermediaire":"0.82","seuilBas":"0.57","numStabilite":"10000","codeTauxDepart":"231","flagConcerne":"true","flagTDM":"true","nomMolecule":"ALPRAZOLAM","denoStabilite":"10000","codeTauxArrive":"281","positionResteRep":"AVANT","ecoPotentielTotal":null,"tauxDepartMoyen":"0.77","tauxRealisation":"0.75222222220","respectTauxStabilite":"true","montant":"116.86"}
}
]'}
Je me suis installé la bibliothèque JSON/SQL trouvée sur http://sourceforge.net/projects/pljson/
J'ai fait une fonction pour pouvoir récupérer la valeur d'un champ pour la 1ère molécule (dans un premier temps).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
CREATE OR REPLACE FUNCTION PH_PARSE
(
MyStringIN NCLOB,
MyChamp VARCHAR2
)
RETURN VARCHAR2 IS
MyStringOUT VARCHAR2(255);
v_Tout json;
v_Mols json;
v_Molecule json;
BEGIN
v_Tout:=json(MyStringIN);
v_Mols:=JSON_EXT.GET_JSON(v_Tout,'listeMolecules');
v_Molecule:=JSON_EXT.GET_JSON(v_Mols,'molecule');
MyStringOUT := JSON_EXT.GET_STRING(v_Molecule,MyChamp,1);
RETURN MyStringOUT;
END;
/ |
Je n'ai pas d'erreur à la compilation ni à l'exécution.
Je n'arrive pas à récupérer la valeur de tauxDepart pour la1ère molécule avec l'appel suivant :
Code:
SELECT PH_PARSE(MyNCLOB,'tauxDepart') FROM DUAL;
La fonction me renvoie une valeur NULL.
Je n'y connais rien en javaScript, si quelqu'un a déjà extrait des données d'une chaîne de caractères représentant un enregistrement JSON avec Oracle, ça m'aiderait bien.
Merci beaucoup.
P.S.
Sur un petit exemple, j'ai réussi à placer ma chaîne de caractères dans un objet json_list et à afficher toutes les données à l'écran.
Mais je n'arrive pas à sélectionner un élément particulier de la liste (par exemple tauxDepart) pour le récupérer et le faire renvoyer par une fonction.
Code:
1 2 3 4 5 6 7 8 9
| set serveroutput on format wrapped;
declare
obj json_list;
begin
obj := json_list('[{"molecule":{"Nom":"Toto","tauxDepart":"0.77","ecoPotentielBoite":"1.65"}},{"molecule":{"Nom":"Titi","tauxDepart":"1.00","ecoPotentielBoite":"5.87"}}]');
obj.path('[1][1]').print; -- fonctionne : 1ère molécule : Affiche à l'écran toutes Données de toto
obj.path('[2][1]').print; -- fonctionne : 2nde molécule : Affiche à l'écran toutes Données de Titi
end;
/ |