Page 1 sur 1

JSON et fichier IFS

Posté : lun. 16 sept. 2019, 11:52:10
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

JSON_TABLE

Posté : lun. 16 sept. 2019, 12:59:51
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

(sans sujet)

Posté : lun. 16 sept. 2019, 14:54:57
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

(sans sujet)

Posté : lun. 16 sept. 2019, 15:23:03
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]

ERROR ON ERROR

Posté : lun. 16 sept. 2019, 15:26:18
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

(sans sujet)

Posté : lun. 16 sept. 2019, 15:37:04
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

Re: JSON et fichier IFS

Posté : jeu. 07 janv. 2021, 10:35:26
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...

Re: JSON et fichier IFS

Posté : jeu. 07 janv. 2021, 17:51:43
par cmasse
Dans l'IFS quel est le CSSID du fichier ?

les droits sont-ile suffisants ?

Re: JSON et fichier IFS

Posté : ven. 08 janv. 2021, 09:03:37
par Erwan_35
Le CCSID est 850 et les droits sont complets.
Je suspecte que le problème provienne du CCSID...

Re: JSON et fichier IFS

Posté : sam. 09 janv. 2021, 10:47:01
par cmasse
850 c'est l'ASCII de DOS.

819 (ASCII international) me semble plus approprié.

Re: JSON et fichier IFS

Posté : lun. 11 janv. 2021, 10:29:14
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...

Re: JSON et fichier IFS

Posté : lun. 11 janv. 2021, 11:14:21
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 ?

Re: JSON et fichier IFS

Posté : mar. 12 janv. 2021, 12:29:25
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 ;

Re: JSON et fichier IFS

Posté : mar. 12 janv. 2021, 14:33:04
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