JSON et fichier IFS

configuration Apache, Zend et PHP , Web services
Répondre
monthi
Messages : 73
Enregistré le : mar. 11 sept. 2018, 15:37:02
Localisation : Paris

JSON et fichier IFS

Message par monthi »

Bonjour

nous venons de passer notre Ibm i en V7R2

est-il possible de lire avec un JSON_TABLE, un fichier de l'ifs contenant un flux JSON comme on peut le faire avec XMLTABLE?

Cdlt.

V7R2 TR9 et C9123720

cmasse
Site Admin
Messages : 812
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

JSON_TABLE

Message par cmasse »

bien sur,

le premier paramètre de la fonction est "un flux JSON", soit :

- une variable
- une colonne d'une table
- le résultat de HTTP_GET_CLOB
- le résultat de GET_CLOB_FROM_FILE

voir https://www.ibm.com/support/knowledgece ... obfile.htm
Christian Massé (Volubis.fr)

monthi
Messages : 73
Enregistré le : mar. 11 sept. 2018, 15:37:02
Localisation : Paris

(sans sujet)

Message par monthi »

Bonjour

j'ai fichier dans l'ifs qui contient les info suivante

Code : Tout sélectionner

 
{"data":{"L":["-num= : "1","Z1" :"L367CF42","Z2:"4071","Z3:"30"},{"-num": "2","Z1":"O548CF42","Z2:"4071","Z3:"30"},{"-num": "3","Z1":"O548CF42","Z2:"6086","Z3:"30"},{"-num": "4","Z1":"Z768CF42","Z2:"4071","Z3:"30"},{"-num": "4","Z1":"Z768CF42","Z2:"4071","Z3:"30"}]}
Je voudrais recupérer la valeur des zone z1, et z2.

j'ai fait la requête suivante :

select * from json_table(GET_CLOB_FROM_FILE('/ptmp/temp.json'), '$.data.L[*]'
columns( "Z1" char(10) path '$.Z1',
"Z2" cchar(4) path '$.z2'
)) as t

je n'ai pas d'erreur a l'éxecution mais aucune données s'affiche.

Cdlt
Modifié en dernier par monthi le lun. 16 sept. 2019, 15:25:32, modifié 1 fois.

monthi
Messages : 73
Enregistré le : mar. 11 sept. 2018, 15:37:02
Localisation : Paris

(sans sujet)

Message par monthi »

il y a une erreur dans le copier coller du json il manque une { et }

Code : Tout sélectionner

{"data":{"L":[{"-num" : "1","Z1" :"L367CF42","Z2:"4071","Z3:"30"},{"-num": "2","Z1":"O548CF42","Z2:"4071","Z3:"30"},{"-num": "3","Z1":"O548CF42","Z2:"6086","Z3:"30"},{"-num": "4","Z1":"Z768CF42","Z2:"4071","Z3:"30"},{"-num": "4","Z1":"Z768CF42","Z2:"4071","Z3:"30"}]}}
cdlt[/quote]

cmasse
Site Admin
Messages : 812
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

ERROR ON ERROR

Message par cmasse »

le JSON est peut-être invalide (je vois "-num= ...)

essaie avec

select * from json_table(GET_CLOB_FROM_FILE('/ptmp/temp.json'), '$.data.L[*]'
columns( "Z1" char(10) path 'Z1',
"Z2" cchar(4) path 'z2'
) ERROR ON ERROR ) as t
Christian Massé (Volubis.fr)

monthi
Messages : 73
Enregistré le : mar. 11 sept. 2018, 15:37:02
Localisation : Paris

(sans sujet)

Message par monthi »

J'ai modifier le JSON et cela fonctionne

Code : Tout sélectionner

{"L":[{"Z1":"16","Z2":"1170518","Z3":"1","Z4":"1","Z5":"1","Z6":"V","Z7":"A","Z9":"3","Z10":"Enfant","Z11":"4","Z12":"  0786TN45","Z13":"6060","Z14":"4","Z15":"20","Z16":"1","Z18":"0","Z19":"0","Z21":"20","Z22":"1","Z24":"0","Z25":"14,91","Z26":"BR"},{"Z1":"16","Z2":"1170518","Z3":"1","Z4":"1","Z5":"3","Z6":"V","Z7":"A","Z8":"","Z9":"3","Z10":"Enfant ","Z11":"8","Z12":"  EI24J155","Z13":"371","Z14":"5","Z15":"15","Z16":"1","Z17":"","Z18":"0","Z19":"0","Z20":"","Z21":"20","Z22":"1","Z23":"","Z24":"0","Z25":"28,6","Z26":"BR"}]}
Merci

Erwan_35
Messages : 11
Enregistré le : ven. 09 juin 2017, 07:47:18

Re: JSON et fichier IFS

Message par Erwan_35 »

Bonjour,
je poste ce message dans ce sujet car il y est tout à fait à sa place et peut l'enrichir.
Je suis en train de développé un programme RPG permmettant de traiter des données issues d'un tiers fournies sous forme de fichier .json assez volumineux (80Mo).
J'ai réalisé avec succès un premier POC permettant de lire un extrati du flux JSON que j'ai inséréré dans un champ de type CLOB d'un seul enregistrement d'une table DB2.
Mais lorsque je tente (en ayant lu ce sujet) de lire le flux directemnet depuis le fichier .json déposé sur l'IFS (par json_table et GET_CLOB_FROM_FILE), je ne parviens pas à récupérer les données (manifestement j'ai le bon nombre d'enregistrements attendus mais les données sont vides).

Voici le flux JSON :

Code : Tout sélectionner

{
    "Articles": [
        {
            "Article": "509179",
            "Recommandations": [
                {
                    "product": "352999",
                    "product_group": "M02030101",
                    "score_product_group": 9.767947861549283
                },
                {
                    "product": "509083",
                    "product_group": "M02050101",
                    "score_product_group": 7.475217627902435
                },
                {
                    "product": "477504",
                    "product_group": "M02050111",
                    "score_product_group": 6.330222823770727
                },
                {
                    "product": "7A7509",
                    "product_group": "M08100108",
                    "score_product_group": 5.2128502473290315
                },
                {
                    "product": "421728",
                    "product_group": "M02020105",
                    "score_product_group": 3.90768190669791
                },
                {
                    "product": "270388",
                    "product_group": "M02050109",
                    "score_product_group": 3.845726630966735
                },
                {
                    "product": "7H6222",
                    "product_group": "M08090501",
                    "score_product_group": 2.897045174433684
                },
                {
                    "product": "499062",
                    "product_group": "M02050112",
                    "score_product_group": 2.2172711716358147
                },
                {
                    "product": "449090",
                    "product_group": "M02020115",
                    "score_product_group": 2.1238021407815446
                },
                {
                    "product": "472636",
                    "product_group": "M02030203",
                    "score_product_group": 0.3035226975855595
                }
            ]
        },
        {
            "Article": "509180",
            "Recommandations": [
                {
                    "product": "509075",
                    "product_group": "M02050101",
                    "score_product_group": 8.262788211000139
                },
                {
                    "product": "485399",
                    "product_group": "M02030101",
                    "score_product_group": 7.440151219227198
                },
                {
                    "product": "477504",
                    "product_group": "M02050111",
                    "score_product_group": 6.330222823770727
                },
                {
                    "product": "7A7509",
                    "product_group": "M08100108",
                    "score_product_group": 5.2128502473290315
                },
                {
                    "product": "275692",
                    "product_group": "M02050109",
                    "score_product_group": 5.0661678055223875
                },
                {
                    "product": "421728",
                    "product_group": "M02020105",
                    "score_product_group": 3.90768190669791
                },
                {
                    "product": "7H6222",
                    "product_group": "M08090501",
                    "score_product_group": 2.897045174433684
                },
                {
                    "product": "499061",
                    "product_group": "M02050112",
                    "score_product_group": 2.4235820734319486
                },
                {
                    "product": "449076",
                    "product_group": "M02020115",
                    "score_product_group": 1.6490608615033409
                },
                {
                    "product": "523231",
                    "product_group": "M02080207",
                    "score_product_group": 0.2599497975866204
                }
            ]
        }
		,
        {
            "Article": "ToTO",
            "Recommandations": [
                {
                    "product": "ToTO_1",
                    "product_group": "M02050101",
                    "score_product_group": 8.262788211000139
                },
                {
                    "product": "ToTO_2",
                    "product_group": "M02030101",
                    "score_product_group": 7.440151219227198
                }
            ]
        }
    ]
}
Voici en PJ les requêtes (avec résultats).

Je pense qu'il ne manque pas grand chose mais je sèche...
Fichiers joints
Et celle basée sur le fichier de l'IFS ne ramenant pas les données
Et celle basée sur le fichier de l'IFS ne ramenant pas les données
Capture2.JPG (35.14 Kio) Vu 791 fois
Voici la requête (avec son résultat) basée sur le flux dans un table
Voici la requête (avec son résultat) basée sur le flux dans un table
Capture1.JPG (46 Kio) Vu 791 fois

cmasse
Site Admin
Messages : 812
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: JSON et fichier IFS

Message par cmasse »

Dans l'IFS quel est le CSSID du fichier ?

les droits sont-ile suffisants ?
Christian Massé (Volubis.fr)

Erwan_35
Messages : 11
Enregistré le : ven. 09 juin 2017, 07:47:18

Re: JSON et fichier IFS

Message par Erwan_35 »

Le CCSID est 850 et les droits sont complets.
Je suspecte que le problème provienne du CCSID...

cmasse
Site Admin
Messages : 812
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: JSON et fichier IFS

Message par cmasse »

850 c'est l'ASCII de DOS.

819 (ASCII international) me semble plus approprié.
Christian Massé (Volubis.fr)

Erwan_35
Messages : 11
Enregistré le : ven. 09 juin 2017, 07:47:18

Re: JSON et fichier IFS

Message par Erwan_35 »

J'ai modifié le CCSID du fichier .json (CHGATR OBJ('/IWS_MVX/Recommender_TEST.json') ATR(*CCSID) VALUE(819)) mais ce n'est pas mieux...

cmasse
Site Admin
Messages : 812
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: JSON et fichier IFS

Message par cmasse »

envoyez moi le fichier que je vérifie si le contenu correspond au CCSID déclaré. si par exemple vous regardez avec WRKLNK/option 5 (DSPF) que voyez vous ?
Christian Massé (Volubis.fr)

cmasse
Site Admin
Messages : 812
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: JSON et fichier IFS

Message par cmasse »

il est écrit

select * from json_table(GET_CLOB_FROM_FILE('/IWS_MVX/Recommender_TEST.json'), '$.Articles.[*]'
columns( code_article char(6) path 'Article',
NESTED '$.Recommandations[*]'columns (
rang for ORDINALITY,
code_associe char(15) path '$.product'
)
) ERROR ON ERROR ) as t ;

OR il faut écrire

select * from json_table(GET_CLOB_FROM_FILE('/IWS_MVX/Recommender_TEST.json'), '$.Articles[*]' <- sans le point
columns( code_article char(6) path '$.Article', <- avec $.
NESTED '$.Recommandations[*]'columns (
rang for ORDINALITY,
code_associe char(15) path '$.product'
)
) ERROR ON ERROR ) as t ;
Christian Massé (Volubis.fr)

Erwan_35
Messages : 11
Enregistré le : ven. 09 juin 2017, 07:47:18

Re: JSON et fichier IFS

Message par Erwan_35 »

C'est évident quand on a la solution sous les yeux :lol:
Je récupère bien mes données. C'est parfait
Merci encore. :D

Répondre