2017-09-18 5 views
1

Je tente de convertir un fichier XML en JSON à l'aide de tables temporaires. Je peux extraire toutes les données de mon XML et les sauvegarder, mais je prends également un champ de relation supplémentaire qui n'est pas nécessaire pour moi. Je pourrais être aveugle mais je ne vois pas la solution pour cela.Progression 4GL: Exportation de XML dans JSON à l'aide de tables temporaires

SORTIE (JSON):

{"employees": { 
"employee": [ 
    { 
     "relation_id": null, 
     "id": 1, 
     "firstname": "aaa", 
     "lastname": "bbb", 
     "role": 1, 
     "photo": "smile.jpg" 
    }, 
    { 
     "relation_id": null, 
     "id": 2, 
     "firstname": "ccc", 
     "lastname": "ddd", 
     "role": 1, 
     "photo": "smile.jpg" 
    }, 
    { 
     "relation_id": null, 
     "id": 3, 
     "firstname": "www", 
     "lastname": "bbb", 
     "role": 0, 
     "photo": "smile.jpg" 
    }, 
    { 
     "relation_id": null, 
     "id": 4, 
     "firstname": "kkk", 
     "lastname": "sdfsdf", 
     "role": 2, 
     "photo": "smile.jpg" 
    }, 
    { 
     "relation_id": null, 
     "id": 5, 
     "firstname": "sdfsdf", 
     "lastname": "gsdg", 
     "role": 2, 
     "photo": "smile.jpg" 
    } ], "roles": [ 
    { 
     "relation_id": null, 
     "role": [ 
     { 
      "relation_id": null, 
      "id": 1, 
      "name": "Actor" 
     }, 
     { 
      "relation_id": null, 
      "id": 2, 
      "name": "Student" 
     } 
     ] 
    } ] }} 

donc je veux supprimer tout le champ « relation_id » donc ma sortie est sans eux, mais je les ai besoin de faire des relations entre les tables temporaires à prendre toutes les données . Des idées?

Voici mon code.

DEFINE VARIABLE start AS LOGICAL NO-UNDO. 
DEFINE VARIABLE zapisz AS LOGICAL NO-UNDO. 
DEFINE VARIABLE typ AS CHARACTER NO-UNDO. 
DEFINE VARIABLE doPliku AS CHARACTER NO-UNDO. 
DEFINE VARIABLE wartosc AS LOGICAL NO-UNDO. 

DEFINE TEMP-TABLE employee NO-UNDO XML-NODE-NAME "employee" 
    FIELD relation_id AS RECID XML-NODE-TYPE "Hidden" 
    FIELD id AS INTEGER 
    FIELD firstname AS CHARACTER 
    FIELD lastname AS CHARACTER 
    FIELD role AS INTEGER 
    FIELD photo AS CHARACTER. 

DEFINE TEMP-TABLE roles NO-UNDO XML-NODE-NAME "roles" 
    FIELD relation_id AS RECID XML-NODE-TYPE "Hidden". 

DEFINE TEMP-TABLE role NO-UNDO XML-NODE-NAME "role" 
    FIELD relation_id AS RECID XML-NODE-TYPE "Hidden" 
    FIELD id AS INTEGER 
    FIELD name AS CHARACTER. 

DEFINE DATASET employees 
FOR employees, employee, roles, role 
DATA-RELATION dr3 FOR roles, role RELATION-FIELDS(relation_id, relation_id) NESTED. 


start = DATASET employees:READ-XML("FILE","D:\USERS\DANIELH\zadanie testowe\relacje2_zmiana\testInputFile2.xml","APPEND", ?, ?, ?, ?). 

    ASSIGN 
    typ = "FILE" 
    doPliku = "D:\USERS\DANIELH\Zadanie testowe\relacje2_zmiana\ZadanieeeWOW.json" 
    wartosc = TRUE. 

zapisz = DATASET employees:WRITE-JSON(typ, doPliku, wartosc). 
+0

Postez le XML que vous lisez à partir du disque. Aussi: votre code ne fonctionnera pas. Les employés de la table temporaire sont manquants dans le code. Aussi je suppose que vous devriez avoir des relations entre les employés -> employés -> rôles? Perpahs c'est dr1 et dr2? – Jensd

Répondre

3

Définissez les champs que vous ne voulez pas dans le fichier JSON comme SERIALIZE-HIDDEN. XML-NODE-TYPE "Hidden" définit seulement comment ils doivent être traités comme xml, pas comme json. Toutefois, pour tous les formats de sérialisation, vous pouvez supprimer XML-NODE-TYPE = "Hidden".

Comme ceci:

DEFINE TEMP-TABLE employee NO-UNDO XML-NODE-NAME "employee" 
    FIELD relation_id AS RECID SERIALIZE-HIDDEN 
    FIELD id AS INTEGER 
    FIELD firstname AS CHARACTER 
    FIELD lastname AS CHARACTER 
    FIELD role AS INTEGER 
    FIELD photo AS CHARACTER.