0

我正在尝试使用 Postman 作为测试工具来验证我们的客户在我们的主系统中都有一个邮寄地址。由于其结构,我无法深入研究 JSON。每个响应都是一个具有单个“节点”的数组结构,没有要寻址的“头属性”。

示例 JSON:


[
  {
    "ID": "cmd_org_628733899",
    "organization": {
      "name": "FULL POTENTIAL",
      "accountStatusCode": "1",
      "accountStatusDescription": "OPEN"
    },
    "location": [
      {
        "locality": "LITTLE ROCK",
        "locationType": "MAILING"
      },
      {
        "locality": "BIG ROCK",
        "locationType": "LOCATION"
      }
    ]
  }
]

测试代码,因为它存在:

pm.test("Check for a Mailing Address", function () {
   // Parse response body
   var jsonData = pm.response.json();

   // Find the array index for the MAILING Address
   var mailingLocationIndex = jsonData.location.map(
          function(filter) {
             return location.locationType; 
          }
    ).indexOf('MAILING'); 

   // Get the mailing location object by using the index calculated above
   var mailingLocation = jsonData.location[mailingFilterIndex];

   // Check that the mailing location exists
   pm.expect(mailingLocation).to.exist;

});

错误消息:TypeError:无法读取未定义的属性“地图”

我知道我必须迭代到外部数组中的 node(0),然后钻入嵌套的位置数组以找到一个 locationType = Mailing 的条目。

我无法通过外部数组。我是 JavaScript 和 JSON 解析的新手——我是一名 COBOL 程序员。

4

1 回答 1

0

什么都不知道,我会说你的意思是这个

pm.test("Check for a Mailing Address", function () {
    var mailingLocations = pm.response.json().location.filter(function (item) {
        return item.locationType === 'MAILING';
    });
    pm.expect(mailingLocations).to.have.lengthOf(1);
});

您想要过滤掉所有具有MAILING类型的位置,并且应该只有一个,或者至少有一个,具体取决于。

pm.response.json()从我的立场来看,是否真的返回了您在问题中显示的对象是不可能的。


在现代 JS 中,上面的内容更短:

pm.test("Check for a Mailing Address", function () {
    var mailingLocations = pm.response.json().location.filter(item => item.locationType === 'MAILING');
    pm.expect(mailingLocations).to.have.lengthOf(1);
});
于 2020-06-26T20:13:10.397 回答