json 如何在luaScript-KrakenD中将对象转换为对象数组

jucafojl  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(70)

我已经提到的代码中,我有那个查询.我请求你帮助我在相同的lua或krakend配置或两者.(注意关键是不存在)

LuaScript

local docDetails = responseData:get("DocDetails")                                                                                                                                 
    -- docDetails:set("D_OffersAddOn", {}) -- Init OffersAddOn is an empty array.
    local discount = {
        ["D_Name"] = "Discount",
        ["D_Price"] = 0,
        ["D_Type"] = "value",
    }
    local D_OffersAddOn = docDetails:get("D_OffersAddOn") 
    -- D_OffersAddOn:set(0,discount)

字符串
我们越来越

{
  "0": {
    "D_Name" : "Discount",
    "D_Price" : 0,
    "D_Type" : "value"
  }
}


而不是这个,我期待着

[
  {
    "D_Name" : "Discount",
    "D_Price" : 0,
    "D_Type" : "value"
  }
]


第1行-->从响应中获取DocDetails
第2行--> D_OffersAddOn键在DocDetails中不存在。所以我创建了一个空表
第3行-->我正在创建折扣对象(表)
第4行-->选择最初创建的D_OffersAddOn数组
第5行-->现在我将discount对象作为数组添加到表中。
当我做下面的操作时,我得到的是作为字符串的异常,但收到的是数字。

-- D_OffersAddOn:set(0,discount)


如果我正在做

docDetails:set("D_OffersAddOn", {discount})


则API返回下面的格式。

{
  "0": {
    "D_Name" : "Discount",
    "D_Price" : 0,
    "D_Type": "value"
  }
}


但我期待下面的格式

{
  "DocDetails": {
    "D_OffersAddOn": [
      {
        "D_Name" : "Discount",
        "D_Price" : 0,
        "D_Type" : "value"
      }
    ]
  }
}

vatpfxk5

vatpfxk51#

我花了好几天时间才弄明白。很遗憾,KrakenD在这方面的文档太少了。下面是一个工作示例,它创建了一个新的JsonArray,并将单个元素插入到现有数组中。

function post_proxy()
      print("postProxy fired!")
      local resp = response.load();
      local data = {}
      local responseData = resp:data()
    
      --Adding new JsonArray
      local array = luaList:new()
      array:set(0,{})
      array:set(1,{})
      array:get(0):set("name","xxx")
      array:get(1):set("name","yyy")
      responseData:set("newArray",array);
      
      --Adding element to existing JsonArray
      local col = responseData:get("collection"); 
      local size = col:len();
      local newArray = luaList:new()
      local j=0
      for i=0,size-1 do
        j=j+1;
        local element = col:get(i)     
        newArray:set(i,element)
      end
      newArray:set(j,{})
      newArray:get(j):set("name","YYY")
      responseData:set("collection", newArray)
      
    end

字符串

相关问题