【问题标题】:Progress 4GL: Exporting XML into JSON using temp-tablesProgress 4GL:使用临时表将 XML 导出为 JSON
【发布时间】:2018-02-26 16:20:42
【问题描述】:

我正在尝试使用临时表将 XML 文件转换为 JSON。我可以从我的 XML 中取出所有数据并保存它,但我也可以使用额外的关系字段,这对我来说不是必需的。我可能是盲人,但我没有看到解决方案。

输出(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"
         }
       ]
     }   ] }}

所以我想删除所有“relation_id”字段,所以我的输出没有它们,但我需要它们在临时表之间建立关系以获取所有数据。有什么想法吗?

这是我的代码。

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).

【问题讨论】:

  • 发布您从磁盘读取的 XML。另外:您的代码不会运行。代码中缺少临时表员工。另外我猜你应该在员工 -> 员工 -> 角色之间建立关系? Perpahs 是 dr1 和 dr2?

标签: json xml temp-tables openedge progress-4gl


【解决方案1】:

将json文件中不需要的字段设置为SERIALIZE-HIDDENXML-NODE-TYPE "Hidden" 只定义了它们应该如何被处理为 xml,而不是 json。

SERIALIZE-HIDDEN 但适用于所有序列化格式,因此您可以删除 XML-NODE-TYPE = "Hidden"

像这样:

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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2021-04-16
    • 2016-09-20
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多