Javascript 如何迭代JSON数组并记录具有特定值的属性
我有一个反应体,看起来像这样Javascript 如何迭代JSON数组并记录具有特定值的属性,javascript,arrays,json,postman,postman-pre-request-script,Javascript,Arrays,Json,Postman,Postman Pre Request Script,我有一个反应体,看起来像这样 { "data_sets":[ { "author": { "name": "foo" }, "category": "zip", "client": true, "
{
"data_sets":[
{
"author": {
"name": "foo"
},
"category": "zip",
"client": true,
"data_type": "zip",
"index": "completed",
"id": 200,
"params": {}
},
{
"author": {
"name": "foo2"
},
"category": "zip",
"client": true,
"data_type": "zip",
"index": "completed",
"id": 190,
"params": {}
}]}
我试图在postman测试中迭代数千个数据集,只需在console.log中记录与环境变量中的id相等的id。对于这个例子,假设是190。我正在尝试类似的东西,但它不起作用。它没有失败,但没有给我预期的输出
这是我的邮递员密码
pm.test("the response has the right id", () => {
id_dataset = pm.environment.get("id");
var jsonData = pm.response.json();
for(var i = 0; i < jsonData.data_sets.length; i++)
if(jsonData.data_sets[i].id == id_dataset)
console.log(jsonData.data_sets[i].id);
});
pm.test(“响应具有正确的id”,()=>{
id_dataset=pm.environment.get(“id”);
var jsonData=pm.response.json();
对于(var i=0;i
有人能帮上忙吗?您忘记了for中的
.length
const jsonData={data_set:[{“author”:{“name”:“foo”},“category”:“zip”,“client”:true,“data_type”:“zip”,“index”:“completed”,“id”:200,“params”:{},{“author”:{“name”:“foo”},“category”:“zip”,“client”:true,“data_type”:“zip”,“index”:“completed”,“id”:200,“params”:{},{“author”:“name”:“foo”},“category”:“zip”,“client”:false,“data_type”:“zip”,“index”:“completed”,“id”:200,“params”:{},{“author”:{“name”:“foo2”},“category”:“zip”,“client”:true,“data_type”:“zip”,“index”:“completed”,“id”:190,“params”:{}}};
const id_数据集=200;
对于(var i=0;i
我们应该能够使用find()
快速搜索所有记录,并找到匹配id为190
的记录。试试这个:
pm.test(“响应具有正确的id”,()=>{
id_dataset=pm.environment.get(“id”);//190
var jsonData=pm.response.json();
log(jsonData.data\u set.find(set=>set.id==id\u dataset)?.id);
});
以下是vanilla JS中的相同逻辑:
let id_dataset=190;
让数据集=[{“作者”:{“名称”:“foo”},类别”:“zip”,“客户机”:true,“数据类型”:“zip”,“索引”:“已完成”,“id”:200,“参数”:{},{“作者”:{“名称”:“foo2”},类别”:“zip”,“客户机”:true,“数据类型”:“zip”,“索引”:“已完成”,“id”:190,“参数”:{}];
log(数据集.find(set=>set.id==id\u数据集)?.id)
i
(注意,您也可以用const data\u set=jsonData.data\u set.find(item=>item.id==id\u dataset);
)替换循环(在一个不相关的注释中:服务器响应是JSON格式的文本。pm.response.JSON();
解析JSON文本,从而生成一个对象。此对象依次包含。data\u set
,这是一个数组。没有“JSON数组”或“JSON对象”之类的东西。JSON无效。它缺少一些逗号,第二个元素缺少}
@Shultz请使用数组方法find()检查我的解决方案
并让我知道这是否适用于您。我已将可选链接?.id
添加到我的解决方案中,以防止在id不存在时抛出错误。如果不使用结果,请使用forEach
而不是map
。我已更改代码以进行这些更新,但日志中仍然没有输出如果只想查看用于测试目的的console.log,最好少写一些code@Shultz能否提供console.log(jsonData)的结果?很可能,您需要使用.json()
解析响应。我的最终目标是断言,假设id 190有一个“客户机”:是的,但这不起作用,所以我将一步一步地解决每个问题part@Shultz你有空谈谈这个吗?看起来您可能已经解决了您的问题,但我仍然想用我的示例进行测试,因为我认为这将简化您的总体逻辑: