Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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 访问名称具有特殊字符的字段_Javascript_Json_Parsing - Fatal编程技术网

Javascript 访问名称具有特殊字符的字段

Javascript 访问名称具有特殊字符的字段,javascript,json,parsing,Javascript,Json,Parsing,我有一个查询函数,返回一个JSON对象,如下所示: [ { "ID":{ "value":"a04c0000008KH4R", "display":"a04c0000008KH4R", "dataType":"string", "label":"Record ID" }, "Account_vod__c":{ "value":"001c000001BCLKfAAP"

我有一个查询函数,返回一个JSON对象,如下所示:

[
   {
      "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”。