首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于多个数组的JSON变换

用于多个数组的JSON变换
EN

Stack Overflow用户
提问于 2022-06-05 18:00:38
回答 2查看 61关注 0票数 1

我是刚接触JSON的。我输入了JSON,其中包括两个数组。第一个(主要结果)包含两个供应商,另一个(BankDetailSet ->results)有供应商的银行详细信息(密钥和帐户)。也就是说,每个供应商都有两个账户。我正在尝试与震动,在输出,我能够获得供应商的信息和银行(bsb和account_number)。问题是相应的供应商银行(bsb和account_number )已经填充了错误的细节。

输入端

  1. (Chigo PvtLimited")BankKey (9877988787 & 89797879798)

第二个(UFCDD )拥有BankKey (652588887 &)

  1. In Out (Chigo PvtLimited")bsb (9877988787 & 652588887)

第二个(UFCDD )拥有bsb (89797879798 &)。

问题是为什么Bankey值在输出(bsb)中被互换。我已经把当前和预期的产出控制在了下面。

输入是:

代码语言:javascript
复制
{
  "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"
            }
          ]
        }
      }
    ]
  }
}

我尝试过的Spec

代码语言:javascript
复制
  [
    {
      "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"
                  }
                }
              }
            }
          }
        }
      }
    }
  ]

电流输出

代码语言:javascript
复制
{
  "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"
  }]
}

预期的输出

代码语言:javascript
复制
    {
      "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"
            }
          ]
        }
      ]
    }
EN

回答 2

Stack Overflow用户

发布于 2022-06-05 18:42:30

您可以在公共对象表示法下收集元素"VendorNumber""VendorName"和具有键名"BankDetailSet"的对象,然后将相对定位通配符(如[&1][&4] )设置为满足最外层"results"数组的相同索引级别,如

代码语言:javascript
复制
[
  {
    "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/上的演示是

编辑:你在最后的评论中所需要的只是与前面的评论相反,例如。使用

代码语言:javascript
复制
"Bank*": "vendors[&4].Bank[&1].&(0,1)"

而不是

代码语言:javascript
复制
"Bank*": "vendors[&1].Bank[&4].&(0,1)" 

或字面上使用(如在您的情况下)

代码语言:javascript
复制
"BankKey": "vendors[&4].Bank[&1].bsb",
"BankAccount": "vendors[&4].Bank[&1].account_number"

比如

代码语言:javascript
复制
[
  {
    "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"
                }
              }
            }
          }
        }
      }
    }
  }
]

演示

票数 1
EN

Stack Overflow用户

发布于 2022-06-06 17:34:16

@ Barbaros zhan,非常感谢,下面一个是产生所需结果的。

[{“行动”:“转移”,

代码语言:javascript
复制
"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"
            }
          }
        }
      }
    }
  }
}

}]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72509876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档