使用字符串变量检索 JSON 数据

Retrieve JSON data with string variable

我正在 React 中为 Jira Cloud 开发自定义字段插件。

我有一个变量 cfDate1,它将自定义字段 ID 存储为字符串,例如 customfield_10072

所以我想获取自定义字段 ID 中的时间数据。

假设我的数据在 jsonData 变量中。 我尝试使用 jsonData.fields.[cfDate1] 到达,但我得到 Error: Identifier expected.

我搜索了一些,但我想我找不到合适的关键字来获得一些解决方案。 有没有人可以帮我弄清楚。我需要了解如何使用字符串变量在 json 查询中获取 json 数据。已经谢谢了!

JSON格式(jsonData):

{
  "expand": "renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice",
  "id": "10008",
  "self": "https://alimert.atlassian.net/rest/api/2/issue/10008",
  "key": "SP-1",
  "fields": {
    "statuscategorychangedate": "2021-10-11T12:17:41.291+0300",
    "customfield_10072": "2021-01-13T02:00:00.000+0300",
    "customfield_10073": "2021-01-26T06:30:00.000+0300",
    "customfield_10075": "2021-10-14",
    "customfield_10076": "2021-10-15" }

必须是jsonData.fields[cfDate1]而不是jsonData.fields.[cfDate1]


有四种方法可以访问对象的属性1:

Syntax Dynamic
key
Optional
chaining
. [] ? Equivalents2
obj.xyz No No Yes No No obj['xyz']
obj[key] Yes No No Yes No -
obj?.xyz No Yes Yes No Yes obj == null ? obj.xyz : undefined
obj == null ? obj['xyz'] : undefined
obj?.[key] ⚠️ Yes Yes Yes ⚠️ Yes Yes obj == null ? obj[key] : undefined

正如您在此 table 中看到的,在大多数情况下,您使用 .(用于静态键) [](对于动态键).

Optional chaining 加一个 ?。但是,在可选链接 动态密钥的情况下,可能会使用 ?.[] 的意外语法,它具有 both .[]3。请注意,这只是 带有可选链接的情况 - 没有可选链接,语法 .[] 无效 .


1: 还有 Reflect.get(obj, key),你可以扩展这个定义来计算涉及遍历原型链的东西,调用 Object.getOwnPropertyDescriptor 并访问 valueget,如果你真的想要的话。但对于初学者来说,如果有的话,这些将更具有学术意义,并且在日常使用的 属性 访问方法列表中包含起来相当混乱。

2: 对于可选链接,显示的等效项仅适用于没有进一步级别链接的情况(例如 obj?.xyz 但不适用于 obj?.xyz.abc).可选链接运算符的另一个 - 非常有用 - 属性 是它完全停止对表达式其余部分的评估,以防左侧为空,因此您可以编写 obj?.xyz.abc 而不是obj?.xyz?.abc 没有错误 Cannot read properties of undefined (reading "abc")。使用显示的等效项是行不通的。

3: 这种有点笨拙的语法的原因是可选链是最近才添加到语言中的,而 ?[] 不能由于与三元运算符的歧义而被使用,并且增加了编写解析器来处理这种情况的难度。 ?.() 也是如此。有关详细信息,请参阅 FAQ in the optional chaining proposal