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

时间:2017-10-11 18:08:40

标签: javascript json parsing

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

          -------
          |  X  |
          -------
-----------------
|               |
-----------------

在控制台中我想使用以下方法打印值:

[
   {
      "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"
      }
   }
]

但它会引发错误:

  

未捕获的TypeError:无法读取属性' FirstName'未定义的

但对于console.log(JSON.stringify(k.data[0].Account.FirstName)); 字段,它正常运行:

ID
  

a04c0000008KH4R

有没有办法解析JSON元素,字段名称包含'。'或其中的其他特殊字符,如console.log(JSON.stringify(k.data[0].ID));

3 个答案:

答案 0 :(得分:5)

您需要遵循以下程序:

Sub ChangeIt(c1 As Range)
    c1.Interior.ColorIndex = 3
End Sub

Function Test()

    With Application.Caller        
        .Parent.Evaluate "Changeit(" & .Address(False, False) & ")"
    End With
    Test = "Hello" 

End Function

答案 1 :(得分:1)

是,

您需要使用括号表示法而不是点符号,这是您当前使用的符号。试试这个:

isDisplayed()

这样,您将使用JSON中存储的方式(使用名为“Account.FirstName”的键)来处理值,而不是将其作为具有FirstName属性的Account对象进行寻址。

答案 2 :(得分:0)

您在此处收到错误,因为您试图以JS解释为另一个嵌套对象的方式访问您的对象属性。使用bracket notation将在此处工作,将对象键更改为不使用'。'作为分隔符也可以。

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'
}
相关问题