[英]JSON transformation using JOLT for Multiple arrays
我是 JSON 新手。 我有包含兩個數組的輸入 JSON。 第一個(主要結果)包含兩個供應商,另一個(BankDetailSet ->results)包含供應商銀行詳細信息(Key 和 Account)。即供應商可以有多個帳戶。 換句話說,每個供應商都有兩個帳戶。 我正在嘗試使用 Jolt,在輸出中,我能夠獲取供應商信息和銀行(bsb 和 account_number)。 問題是相應的供應商銀行(bsb 和 account_number )填充了錯誤的詳細信息。
在輸入第一個供應商(Chigo PvtLimited")中有BankKey (9877988787 & 89797879798)
而第二個(UFCDD Pvt Limited)有BankKey (652588887 和 294454545)
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.