QML中如何通过索引访问JSON数组元素及对象字段
QML中正确访问JSON对象数组元素的方法
你当前代码的问题出在错误使用了valueOf()方法——这个方法并非用来获取对象属性,它的作用是返回对象的原始值,传入参数"params"不会让它返回对应的数组,导致后续elem为undefined,进而触发报错。
正确访问方式
直接通过点语法或方括号语法获取params数组,再按索引访问数组元素:
方式1:点语法(推荐,属性名固定时使用)
var jsonObj = JSON.parse(dataFile); var i = 0; var elem = jsonObj.params[i]; console.log("params[" + i + "]: ", elem); console.log("params[" + i + "].id: ", elem.id); console.log("params[" + i + "].tag: ", elem.tag);
方式2:方括号语法(适合属性名动态或含特殊字符的场景)
var jsonObj = JSON.parse(dataFile); var i = 0; var elem = jsonObj["params"][i]; console.log("params[" + i + "].name: ", elem.name); console.log("params[" + i + "].value: ", elem.value);
遍历整个数组的示例
如果需要处理数组中所有元素,可以用循环遍历:
var jsonObj = JSON.parse(dataFile); var paramsArr = jsonObj.params; for (var idx = 0; idx < paramsArr.length; idx++) { var item = paramsArr[idx]; console.log(`第${idx+1}个元素:id=${item.id}, tag=${item.tag}, value=${item.value}`); }
为什么valueOf()不行?
valueOf()是JS对象的内置方法,默认返回对象本身,它不接受属性名参数,所以jsonObj.valueOf("params")实际返回的还是jsonObj这个顶层对象,而非params数组。你尝试对顶层对象取索引[i],自然得到undefined,后续访问elem.id就会触发"Cannot read property 'id' of undefined"的错误。
内容的提问来源于stack exchange,提问作者Pietro
相关产品推荐
相关产品推荐

