簡體   English   中英

使用 JOLT 對多個數組進行 JSON 轉換

[英]JSON transformation using JOLT for Multiple arrays

我是 JSON 新手。 我有包含兩個數組的輸入 JSON。 第一個(主要結果)包含兩個供應商,另一個(BankDetailSet ->results)包含供應商銀行詳細信息(Key 和 Account)。即供應商可以有多個帳戶。 換句話說,每個供應商都有兩個帳戶。 我正在嘗試使用 Jolt,在輸出中,我能夠獲取供應商信息和銀行(bsb 和 account_number)。 問題是相應的供應商銀行(bsb 和 account_number )填充了錯誤的詳細信息。

  1. 在輸入第一個供應商(Chigo PvtLimited")中有BankKey (9877988787 & 89797879798)
    而第二個(UFCDD Pvt Limited)BankKey (652588887 和 294454545)

  2. In Out Put 第一個供應商(Chigo PvtLimited")bsb (9877988787 & 652588887)
    而第二個(UFCDD Pvt Limited)bsb (89797879798 和294454545)

問題是為什么 Bankey 值在輸出 (bsb) 中被互換。 我已粘貼在當前和預期的輸出下方

輸入是:

{
  "d": {
    "results": [
      {
        "__metadata": {
          "type": "Core vendor.Vendor"
        },
        "VendorNumber": "7779898",
        "VendorName": "Chigo PvtLimited",
        "BankDetailSet": {
          "results": [
            {
              "__metadata": {
                "type": "UFCDR Pvt Limited"
              },
              "BankKey": "9877988787",
              "BankAccount": "987788798778879"
            },
            {
              "__metadata": {
                "type": "UFCDR Pvt Limited"
              },
              "BankKey": "89797879798",
              "BankAccount": "564654456456465"
            }
          ]
        }
      },
      {
        "__metadata": {
          "type": "Alpha vendor.Vendor"
        },
        "VendorNumber": "987545",
        "VendorName": "UFCDD  Pvt Limited",
        "BankDetailSet": {
          "results": [
            {
              "__metadata": {
                "type": "UFCDD.BankDetail"
              },
              "BankKey": "652588887",
              "BankAccount": "66887454"
            },
            {
              "__metadata": {
                "type": "UFCDR Pvt Limited"
              },
              "BankKey": "294454545",
              "BankAccount": "4578777"
            }
          ]
        }
      }
    ]
  }
}

我試過的規格

  [
    {
      "operation": "shift",
      "spec": {
        "d": {
          "results": {
            "*": {
              "VendorNumber": "vendors.[&1].name",
              "VendorName": "vendors.[&1].VendorName",
              "BankDetailSet": {
                "results": {
                  "*": {
                    "BankKey": "vendors[&1].Bank[&4].bsb",
                    "BankAccount": "vendors[&1].Bank[&4].account_number"
                  }
                }
              }
            }
          }
        }
      }
    }
  ]

當前輸出

{
  "vendors": [{
    "name": "7779898",
    "VendorName": "Chigo PvtLimited",
    "Bank": [{
      "bsb": "9877988787",
      "account_number": "987788798778879"
    }, {
      "bsb": "652588887",
      "account_number": "66887454"
    }]
  }, {
    "Bank": [{
      "bsb": "89797879798",
      "account_number": "564654456456465"
    }, {
      "bsb": "294454545",
      "account_number": "4578777"
    }],
    "name": "987545",
    "VendorName": "UFCDD  Pvt Limited"
  }]
}

預期輸出

    {
      "vendors": [
        {
          "name": "7779898",
          "VendorName": "Chigo PvtLimited",
          "Bank": [
            {
              "bsb": "9877988787",
              "account_number": "987788798778879"
            },
            {
              "bsb": "89797879798",
              "account_number": "564654456456465"
            }
          ]
        },
        {
          "name": "987545",
          "VendorName": "UFCDD  Pvt Limited",
          "Bank": [
            {
              "bsb": "652588887",
              "account_number": "66887454"
            },
            {
              "bsb": "294454545",
              "account_number": "4578777"
            }
          ]
        }
      ]
    }







您可以在常用對象表示法下收集元素"VendorNumber""VendorName"和鍵名為"BankDetailSet"的對象,然后設置[&1][&4]等相對定位通配符滿足同級索引最外面的"results"數組,例如

[
  {
    "operation": "shift",
    "spec": {
      "d": {
        "results": {
          "*": {
            "VendorNu*": "vendors[&1].name",
            "VendorNa*": "vendors[&1].&",
            "Bank*": {
              "results": {
                "*": {
                  "Bank*": "vendors[&1].Bank[&4].&(0,1)"
                }
              }
            }
          }
        }
      }
    }
  }
]

網站http://jolt-demo.appspot.com/上的演示是在此處輸入圖像描述

編輯:您在最后一條評論中需要的只是前一條的相反,例如。 利用

"Bank*": "vendors[&4].Bank[&1].&(0,1)"

代替

"Bank*": "vendors[&1].Bank[&4].&(0,1)" 

或字面上使用(如您的情況)

"BankKey": "vendors[&4].Bank[&1].bsb",
"BankAccount": "vendors[&4].Bank[&1].account_number"

[
  {
    "operation": "shift",
    "spec": {
      "d": {
        "results": {
          "*": {
            "VendorNu*": "vendors[&1].name",
            "VendorNa*": "vendors[&1].&",
            "Bank*": {
              "results": {
                "*": {
                  "BankKey": "vendors[&4].Bank[&1].bsb",
                  "BankAccount": "vendors[&4].Bank[&1].account_number"
                }
              }
            }
          }
        }
      }
    }
  }
]

演示

在此處輸入圖像描述

@Barbaros Özhan,非常感謝,下面的一個正在產生所需的結果..

[ {“操作”:“班次”,

"spec": {

  "d": {

    "results": {


      "*": {
        "VendorNu*": "vendors[&1].name",
        "VendorNa*": "vendors[&1].&",
        "Bank*": {
          "results": {
            "*": {
              "BankKey": "vendors[&4].Bank[&1].bsb",
              "BankAccount": "vendors[&4].Bank[&1].account_number"
            }
          }
        }
      }
    }
  }
}

}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM