【问题标题】:POSTMAN - Save a property value from a JSON responsePOSTMAN - 从 JSON 响应中保存属性值
【发布时间】:2019-02-23 15:00:54
【问题描述】:

我是 JSON 和 Postman 的新手(截至昨天)。

我正在尝试做一些非常简单的事情,我创建了一个 GET 请求,它在 JSON 响应中提取表单列表。我想接受此响应并获取第一个“id”令牌并将其放入变量中。

我正在使用一个全局变量,但如果可能的话,我想使用一个集合变量。无论哪种方式,这都是我正在做的事情。

我尝试了几件事,最近是这样的:

var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id", jsonData.args.id);

还有这个:

pm.test("GetId", function () {
    var jsonData = pm.response.json();
    pm.globals.set("id", jsonData.id);    
});

响应代码如下所示:

{
   "forms":[
      {
         "id":"3197239",
         "created":"2018-09-18 11:37:39",
         "db":"1",
         "deleted":"0",
         "folder":"151801",
         "language":"en",
         "name":"Contact Us",
         "num_columns":"2",
         "submissions":"0",
         "submissions_unread":"0",
         "updated":"2018-09-18 12:02:13",
         "viewkey":"xxxxxx",
         "views":"1",
         "submissions_today":0,
         "url":"https://xxx",
         "data_url":"",
         "summary_url":"",
         "rss_url":"",
         "encrypted":false,
         "thumbnail_url":null,
         "submit_button_title":"Submit Form",
         "inactive":false,
         "timezone":"US/Eastern",
         "permissions":150
      },
      {
         "id":"3197245",
         "created":"2018-09-18 11:42:02",
         "db":"1",
         "deleted":"0",
         "folder":"151801",
         "language":"en",
         "name":"Football Draft",
         "num_columns":"1",
         "submissions":"0",
         "submissions_unread":"0",
         "updated":"2018-09-18 12:11:54",
         "viewkey":"xxxxxx",
         "views":"1",
         "submissions_today":0,
         "url":"https://xxxxxxxxx",
         "data_url":"",
         "summary_url":"",
         "rss_url":"",
         "encrypted":false,
         "thumbnail_url":null,
         "submit_button_title":"Submit Form",
         "inactive":false,
         "timezone":"US/Eastern",
         "permissions":150
      }
   ]
}

【问题讨论】:

    标签: json postman


    【解决方案1】:

    这将获得第一个id

    pm.globals.set('firstId', _.first(pm.response.json().forms).id)
    

    每次都会获得数组中的第一个,因此它会在响应发生变化时设置一个不同的变量。


    您创建的 test 几乎就在那里,但引用需要向下一层进入 forms 数组:

    pm.test("GetId", function () {
        var jsonData = pm.response.json()
        pm.expect(jsonData.forms[0].id).to.equal("3197239")
        pm.globals.set("id", jsonData.forms[0].id)   
    })
    

    [0] 引用数组中第一个对象中的第一个 id。例如[1] 会得到第二个,依此类推。


    您目前无法使用 pm.* API 设置集合级别变量 - 这些只能手动添加并使用 pm.variables.get('var_name') 语法引用。

    编辑:

    在新版本的桌面应用程序中,您可以使用 pm.collectionVariables.set() 在集合级别设置变量。

    【讨论】:

    • 谢谢你的工作!我是如此接近!非常感谢。
    • 不用担心 - 你愿意接受这个作为这个问题的答案吗?
    • "pm.collectionVariables.set" 现在可用于设置集合变量。另外,@DanaFisher 你应该接受 Danny 的回答,这样他才能得到认可。
    【解决方案2】:

    如果您想将 id 设置为全局变量,则基于名称或任何其他属性,那么就是这样。

    
    for(var i=0; i<jsonData.forms.length; i++)
    {
        if (jsonData.forms[i].name==="Contact Us")
        {
           pm.environment.set("id", jsonData.forms[i].id);
        }   
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-25
      • 2017-04-24
      • 2012-10-14
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      相关资源
      最近更新 更多