【问题标题】:openedge write-json how to add objectopensge write-json 如何添加对象
【发布时间】:2022-01-19 08:22:36
【问题描述】:

这是我想要的输出

{ "event_type": "LOAD_AVAILABLE",
  "event_data": {
  "load": [
    {
      "Ord": "ORDER12344",
      "ShipReqDt": "2021-10-29",
      "load_items": [
        {
          "ItemDesc": "Apple 12oz English Domestic: 10004-000",
          "Qty": 320
        },
        {
          "ItemDesc": "Apple CTN 12",
          "Qty": 980
        }
      ]
    }
  ]
}}

这是我的代码

def temp-table ttOrd serialize-name "load"
  field Ord       like Ord.Ord
  field ShipReqDt like Ord.ShipReqDt.    
def temp-table ttItem serialize-name "load_items"
  field Ord       like OrdDet.Ord serialize-hidden
  field ItemDesc  as char
  field Qty       like OrdDet.ActBox.
  
def dataset dsOrd serialize-name "event_data" for 
  ttOrd, ttItem
  data-relation Rel1 for ttOrd, ttItem nested relation-fields(Ord, Ord).

procedure WriteJSON:
def var dFilename    as char                 no-undo.
  
  dFilename    = dSessTmpDir + "/Test1.xml".
  
  find Ord no-lock where
       Ord.Ord = "ORDER12344"
       no-error.
  create ttOrd.
  assign
    ttOrd.Ord = Ord.Ord
    ttOrd.ShipReqDt = Ord.ShipReqDt.
  
  for each OrdDet where OrdDet.Ord = Ord.Ord on error undo, return error on stop undo, return error:
      
    Create ttItem.
    assign
      ttItem.Ord = OrdDet.Ord
      ttItem.ItemDesc = OrdDet.Descr  
      ttItem.Qty      = OrdDet.Qty.
    
  end. 
  
  dataset dsOrd:write-json("FILE", dFilename, true).
  
end procedure. /* WriteJSON */

我的期望输出中唯一缺少的是第一行中的一个对象

"event_type": "LOAD_AVAILABLE"

关于如何添加它们的任何建议?

谢谢你

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    您可以先将数据集的 JSON 加载到 JSON 对象中:

    在程序的顶部(第一条语句):

    USING Progress.Json.ObjectModel.* FROM PROPATH.
    
    DEFINE VARIABLE oJsonObject AS JsonObject NO-UNDO .
    DEFINE VARIABLE oJsonObject2 AS JsonObject NO-UNDO .
    

    而不是你的 dsOrd:WRITE-JSON

    oJsonObject = NEW JsonObject () .
    
    dataset dsOrd:write-json("JsonObject", oJsonObject, true).
    
    oJsonObject2 = NEW JsonObject () .
    oJsonObject2:Add ("event_type", "LOAD_AVAILABLE") .
    oJsonObject2:Add ("event_data", oJsonObject:GetJsonObject ("event_data") .
    oJsonObject2:WriteFile(dFileName, TRUE) .
    

    【讨论】:

    • 这太棒了,谢谢。但是 "event_type": "LOAD_AVAILABLE" 显示为第二个对象(如底部所示),有没有办法附加到顶部?
    • 您是否尝试过交换数据集 dsOrd:write-json .... 和 oJsonObject:Add 行?
    • 是的,交换它们不起作用。意味着 event_type 根本没有显示
    • 好的,那么我们需要第二个 JsonObject 类型的变量。我将在我的答案中编辑代码。
    • 工作!谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2011-11-21
    • 2014-07-06
    • 2017-08-04
    • 2022-01-27
    • 2014-12-16
    • 1970-01-01
    相关资源
    最近更新 更多