Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何迭代JSON数组并记录具有特定值的属性_Javascript_Arrays_Json_Postman_Postman Pre Request Script - Fatal编程技术网

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你有空谈谈这个吗?看起来您可能已经解决了您的问题,但我仍然想用我的示例进行测试,因为我认为这将简化您的总体逻辑: