如何在JavaScript/ECMAScript中遍历JSON对象并匹配输出
问题描述
我有如下JSON响应数据,难以遍历该JSON结构。需求是当与另一个JSON对象Data匹配时,打印方括号内的数字,例如本次应输出6099。
Response和Data
var Response = { "Employee" : { "John" : [ "6131" ], "Alex" : [ "402537" ], "Mary" : [ "6039" ], "Java" : [ "6039" ], "Anna" : [ "6099" ] } } var Data = [ { "empName": "Anna" } ]
我尝试使用forEach方法,但因Response不是数组或集合而报错**"Response.employee.forEach is not a function"**,不清楚如何遍历JSON对象,尝试的代码如下:
var Data1 = JSON.parse(Data) var res= JSON.parse(Response) res.Employee.forEach(function(res1) { var test = res1 if(Data1.empName== test){ console.log(test[0]) } });
期望输出应为:6099
解决方案
基础错误纠正
- Response和Data本身已是JavaScript对象,无需用
JSON.parse()解析(该方法仅用于处理JSON格式字符串),否则会触发错误。 Response.Employee是键值对对象,并非数组,因此不能调用数组专属的forEach方法。
高效实现方式(推荐)
若仅需匹配Data中的empName并获取对应值,直接通过属性访问即可,无需遍历:
// 获取目标员工姓名 const targetEmpName = Data[0].empName; // 直接通过属性名提取对应ID const targetId = Response.Employee[targetEmpName][0]; console.log(targetId); // 输出:6099
遍历对象的通用方式
若需遍历所有员工信息进行匹配,可使用Object.entries()将对象转换为键值对数组,再用forEach遍历:
// 转换对象为键值对数组并遍历 Object.entries(Response.Employee).forEach(([empName, idArray]) => { if (empName === Data[0].empName) { console.log(idArray[0]); // 输出:6099 } });
内容的提问来源于stack exchange,提问作者Mayo
相关产品推荐
相关产品推荐

