代码之家  ›  专栏  ›  技术社区  ›  GettingStarted With123

Mule 4 dataweave 2-如何对包含其他对象的json对象进行排序

  •  0
  • GettingStarted With123  · 技术社区  · 11 月前

    我需要对不是简单键值的json对象(而不是数组)进行排序 相反,它内部有其他对象

    {
    "Memo": {
        "itemAmount1": "5",
        "taxName1": "TAX",
        "productPrice1": "10",
        "accountName1": "Account Receivable (Debtors)"
    },
    "Footer": {
        "productDescription2": "Maggie",
        "itemQuantity2": "49.5",
        "accountName2": "Account Receivable (Debtors)",
        "taxName2": "TAX"
    },
    "Header": {
        "itemDiscount3": "10",
        "accountName3": "Account Receivable (Debtors)",
        "productPrice3": "10",
        "taxName3": "TAX"
    }
    }
    

    预期输出为:(也应对内部对象的键进行排序)

     {
    "Footer": {
        "accountName2": "Account Receivable (Debtors)",
        "itemQuantity2": "49.5",
        "productDescription2": "Maggie",
        "taxName2": "TAX"
    },
    "Header": {
        "accountName3": "Account Receivable (Debtors)",
        "itemDiscount3": "10",
        "productPrice3": "10",
        "taxName3": "TAX"
    },
    "Memo": {
        "accountName1": "Account Receivable (Debtors)",
        "itemAmount1": "5",
        "productPrice1": "10",
        "taxName1": "TAX"
    }
    }
    

    不一定是2级对象层次结构,它可以包含n级需要排序的对象层次结构。

    这个问题是所问问题的虚拟复制粘贴 here (但这是针对javascript而非dataweave/mule)

    1 回复  |  直到 11 月前
        1
  •  1
  •   aled    11 月前

    内置函数 orderBy() 也可以对对象进行排序。但是,要对子对象进行排序,您需要一个应用的递归函数 orderBy() 给按类型匹配的孩子。

    %dw 2.0
    output application/json
    fun sortObjects(x)=
        x match {
            case o is Object -> o 
                                  orderBy ((value, key) -> key)
                                  mapObject (($$): sortObjects($))
            else -> $
      }
    ---
    sortObjects(payload)
    

    输出

    {
      "Footer": {
        "accountName2": "Account Receivable (Debtors)",
        "itemQuantity2": "49.5",
        "productDescription2": "Maggie",
        "taxName2": "TAX"
      },
      "Header": {
        "accountName3": "Account Receivable (Debtors)",
        "itemDiscount3": "10",
        "productPrice3": "10",
        "taxName3": "TAX"
      },
      "Memo": {
        "accountName1": "Account Receivable (Debtors)",
        "itemAmount1": "5",
        "productPrice1": "10",
        "taxName1": "TAX"
      }
    }
    

    请注意,将匹配项添加到 Array 您可以使用该函数同时对数组进行排序。