问题描述
var sampleArray =
{ID:1,ANALYSIS_NAME : "name1",custodians:"[{\"ID\": 1,\"NAME\": \"abc\"},{\"ID\": 2,\"NAME\": \"xyz\"},{\"ID\": 3,\"NAME\": \"pqr\"}]"
};
如何从上述数组中获取名称。我可以显示 console.log(sampleArray.custodians)
但是当我尝试显示 console.log(sampleArray.custodians.name)
时出现错误 Cannot read property 'NAME' of undefined
。
return(<div>
<Panel>test</panel>
/*custodians should come here*/
</div>)
如何显示上述对象?请帮忙。提前致谢
解决方法
部分问题是因为 sampleArray.custodians
是 JSON 格式的字符串。在访问它之前,您需要对其进行反序列化。
问题的另一部分是反序列化的结果会将 custodians
转换为数组,因此您需要通过索引或循环直接访问它。
var sampleArray = {
ID: 1,ANALYSIS_NAME: "name1",custodians: "[{\"ID\": 1,\"NAME\": \"abc\"},{\"ID\": 2,\"NAME\": \"xyz\"},{\"ID\": 3,\"NAME\": \"pqr\"}]"
};
let custodians = JSON.parse(sampleArray.custodians);
custodians.forEach(c => console.log('loop',c.NAME)); // loop
console.log('index',custodians[0].NAME); // direct access by index
-- 更新 --
根据您的问题的更新,您可以使用 map()
构建 HTML 字符串以从您的函数返回:
var sampleArray = {
ID: 1,\"NAME\": \"pqr\"}]"
};
let buildCustodianHtml = (data) => {
let custodianHtml = JSON.parse(data.custodians).map(c => `<p>${c.NAME}</p>`).join('');
return `<div><Panel>test</panel>${custodianHtml}</div>`;
}
$('#container').append(buildCustodianHtml(sampleArray));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container"></div>
custodians 属性是一个字符串。您首先需要使用
将此字符串转换为JSONvar custodians = JSON.parse(sampleArray.custodians);
然后您可以使用
访问它console.log(custodians[0].NAME)
由于custodians是一个字符串,所以需要先转换成对象才能访问“NAME”。
使用 JavaScript 的内置 JSON.Parse()
var sampleArray =
{
ID:1,ANALYSIS_NAME : "name1",custodians:`[{\"ID\": 1,\"NAME\": \"pqr\"}]`
};
let newObj = JSON.parse(sampleArray.custodians);
for(let i=0; i<newObj.length; i++){
console.log(`Name: ${newObj[i]["NAME"]}`);
}