使用字符串变量检索 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
并访问 value
或 get
,如果你真的想要的话。但对于初学者来说,如果有的话,这些将更具有学术意义,并且在日常使用的 属性 访问方法列表中包含起来相当混乱。
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。
我正在 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
并访问 value
或 get
,如果你真的想要的话。但对于初学者来说,如果有的话,这些将更具有学术意义,并且在日常使用的 属性 访问方法列表中包含起来相当混乱。
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。