Javascript 访问名称具有特殊字符的字段
我有一个查询函数,返回一个JSON对象,如下所示:Javascript 访问名称具有特殊字符的字段,javascript,json,parsing,Javascript,Json,Parsing,我有一个查询函数,返回一个JSON对象,如下所示: [ { "ID":{ "value":"a04c0000008KH4R", "display":"a04c0000008KH4R", "dataType":"string", "label":"Record ID" }, "Account_vod__c":{ "value":"001c000001BCLKfAAP"
[
{
"ID":{
"value":"a04c0000008KH4R",
"display":"a04c0000008KH4R",
"dataType":"string",
"label":"Record ID"
},
"Account_vod__c":{
"value":"001c000001BCLKfAAP",
"display":"001c000001BCLKfAAP",
"dataType":"string",
"label":"Account"
},
"Account.ID":{
"value":"001c000001BCLKfAAP",
"display":"001c000001BCLKfAAP",
"dataType":"string",
"label":"Record ID"
},
"Account.FirstName":{
"value":"Abdi",
"display":"Abdi",
"dataType":"string",
"label":"FirstName"
}
}
]
在控制台中,我想使用以下方式打印值:
console.log(JSON.stringify(k.data[0].Account.FirstName));
但这会带来错误:
未捕获的TypeError:无法读取未定义的属性“FirstName”
但是对于ID
字段,它工作正常:
console.log(JSON.stringify(k.data[0].ID));
a04c0000008KH4R
有没有办法解析JSON元素,字段名中有“.”或其他特殊字符,如
Account.FirstName
?您需要遵循以下过程:
console.log(JSON.stringify(k.data[0]['Account.FirstName']));
您需要遵循以下步骤:
console.log(JSON.stringify(k.data[0]['Account.FirstName']));
对
您将希望使用括号表示法,而不是点表示法,这是您当前正在使用的。试试这个:
console.log(JSON.stringify(k.data[0]["Account.FirstName"]));
通过这种方式,您可以按照存储在JSON中的方式(使用名为“Account.FirstName”的键)对值进行寻址,而不是将其作为属性为FirstName的Account对象进行寻址。是
您将希望使用括号表示法,而不是点表示法,这是您当前正在使用的。试试这个:
console.log(JSON.stringify(k.data[0]["Account.FirstName"]));
这样,您就可以按照存储在JSON中的方式(使用名为“Account.FirstName”的键)对值进行寻址,而不是将其作为具有FirstName属性的Account对象进行寻址。您在这里遇到了一个错误,因为您试图以JS解释为另一个嵌套对象的方式访问对象属性。在这里使用将起作用,将对象键更改为不使用“.”作为分隔符也将起作用
const data = '[
{
"ID":{
"value":"a04c0000008KH4R",
"display":"a04c0000008KH4R",
"dataType":"string",
"label":"Record ID"
},
"Account_vod__c":{
"value":"001c000001BCLKfAAP",
"display":"001c000001BCLKfAAP",
"dataType":"string",
"label":"Account"
},
"Account.ID":{
"value":"001c000001BCLKfAAP",
"display":"001c000001BCLKfAAP",
"dataType":"string",
"label":"Record ID"
},
"Account.FirstName":{
"value":"Abdi",
"display":"Abdi",
"dataType":"string",
"label":"FirstName"
}
}
]';
let parse = JSON.parse(data);
/*
This will trigger the error you get:
console.log(JSON.stringify(parse.Account.FirstName));
JS will interpret this as:
parse: {
Account: {
FirstName: 'value'
}
}
*/
console.log(JSON.stringify(parse['Account.FirstName']));
/*
JS will interpret this correctly as
parse: {
'Account.FirstName': 'value'
}
这里出现错误,因为您试图以JS解释为另一个嵌套对象的方式访问对象属性。在这里使用将起作用,将对象键更改为不使用“.”作为分隔符也将起作用
const data = '[
{
"ID":{
"value":"a04c0000008KH4R",
"display":"a04c0000008KH4R",
"dataType":"string",
"label":"Record ID"
},
"Account_vod__c":{
"value":"001c000001BCLKfAAP",
"display":"001c000001BCLKfAAP",
"dataType":"string",
"label":"Account"
},
"Account.ID":{
"value":"001c000001BCLKfAAP",
"display":"001c000001BCLKfAAP",
"dataType":"string",
"label":"Record ID"
},
"Account.FirstName":{
"value":"Abdi",
"display":"Abdi",
"dataType":"string",
"label":"FirstName"
}
}
]';
let parse = JSON.parse(data);
/*
This will trigger the error you get:
console.log(JSON.stringify(parse.Account.FirstName));
JS will interpret this as:
parse: {
Account: {
FirstName: 'value'
}
}
*/
console.log(JSON.stringify(parse['Account.FirstName']));
/*
JS will interpret this correctly as
parse: {
'Account.FirstName': 'value'
}
使用['Account.FirstName']而不是Account.FirstName。在没有括号的情况下,它试图遍历到不存在的节点“Account”,然后查找也不存在的子节点“FirstName”。请使用['Account.FirstName'],而不是Account.FirstName。在没有括号的情况下,它试图遍历到一个不存在的节点“Account”,然后寻找一个也不存在的子节点“FirstName”。